2017-03-17 4 views
4

私が作成したクラスAssetFamilyのコレクションである公開変数Public AssetFamilyCollection As New Collectionがあります。プライベート変数への変更はなぜ公開されているのですか?

サブ内ではAssetFamilyインスタンスをDim familyChosen As AssetFamilyで作成します。私はコレクションにしたいAssetFamilyは、私はいくつかの点で

Set familyChosen = AssetFamilyCollection(i)を行う特定した後 、私はfamilyChosenを考えた私はfamilyChosenプロパティに変更を加えると、私はそれらの変更もAssetFamilyCollection(i)

に行われていることに気づきましたプライベート変数、AssetFamilyCollection(i)からのコピーであり、サブ内にのみ存在します。どうやらない。

なぜパブリック変数とプライベート変数が変更によって影響を受け、プライベート変数の影響を受けないのですか?

ありがとうございます!

答えて

6

いいえ、そのようには機能しません。

familyChosen変数は、実際には、配列要素が参照しているものと同じオブジェクトへの参照です。

したがって、その参照または配列要素を通じてそのオブジェクトを変更できます。

2

これは、それらが両方とも同じオブジェクトを参照しているように、1つのインスタンスへの変更が他を更新する「familyChosenが」今「AssetFamilyCollection(I)」への参照である

Set familyChosen = AssetFamilyCollection(i) 

のbecuaseです。

+1

は正式には、同じオブジェクトへの参照です。 – Bathsheba

2
  • これはベーシックタイプオブジェクトの種類についての問題です。

    あなたはディープコピーシャローコピー間diffenerceを知っておく必要があるかもしれません。


  • コード "AssetFamilyとして暗いfamilyChosen" を実行すると、新しい 「AssetFamily」が作成されました。

    しかし、 "設定familyChosen = AssetFamilyCollection(I)"、実行 何も作成されなかった、あなただけのfamilyChosenが既に存在していた 「AssetFamily」を指摘しました。作成するには、このような「クローン」として


  • あなたが「コピー」ではなく「ポインタ」をしたいのであれば、あなたはクラスで「AssetFamily」を 関数を書くことができますが、新しい 「AssetFamily」を作成し、古いものと同じにします。

    その後、あなたはこのような何か書くことができます。.Cloneを

    設定familyChosen = AssetFamilyCollection(i)を()は配列の要素が参照するよう

関連する問題