2017-03-20 27 views
0

C#の新機能で、参照型はメモリ内の他の場所(通常はヒープ上)のオブジェクトへの参照を格納する型です。私の質問は、私はそのメンバ変数として他のクラスを保持するクラスを持っている場合は、それらのクラスメンバ変数も参照を格納しますか?私はあなたのクラスメンバ変数が所有オブジェクトの存続期間に縛られることを望んでいるだけで、これらのメンバ変数がメモリ内の他のオブジェクトへの参照を格納するのは意味がないからです。これは、これらの変数の値を調べるときに不要な間接参照を追加するだけです。 これは、これらのメンバー変数を構造体にすることですが、そのメンバ変数に継承または他のクラスのみの機能が必要な場合はどうすればよいでしょうか?どんな洞察にも感謝します。参照型メンバーを持つC#参照型

+0

'これを回避する方法は、メンバー変数をstructs' <= nopeにすることです。http://stackoverflow.com/a/1932787/1260204とhttps://blogs.msdn.microsoft.com/を参照してください。 ericlippert/2009/04/27/the-stack-of-an-implementation-detail-part-one/ – Igor

+1

@Igorいいえ、ジェイソンは正しいです。問題は、内部オブジェクトがスタックに存在するかどうかではなく、外部オブジェクトが参照または内部オブジェクト自体を格納するかどうかであった。 –

+0

@NicoSchertler - ああ、私は誤解しました。 – Igor

答えて

5

あなたは自分のクラスのメンバ変数は、自分の所有しているオブジェクト

まあ、所有の寿命に縛らあるメンバ変数の寿命に を接続することにしたい多くの時間オブジェクト。オーナーオブジェクトインスタンスがガベージコレクションされると(メンバーオブジェクトへの他の参照がない限り)、ガベージコレクションの対象となります。

言語とこれらの概念に慣れてきたので、ほとんどすべての状況で参照型を扱うことが非常に望ましいことがわかります。クラスの代わりに構造体のような値型を定義し、クラスを介して構造体を選択するという決定は、クラスインスタンスの存続期間に結びついていない状況が限られています。 MSDN for guidance on choosing between a class and a structを参照してください。

0

他のクラスをメンバー変数として保持しているクラスがある場合、そのクラスメンバー変数にも参照が格納されていますか?

はい

...あなたは自分のクラスのメンバ変数は、自分の所有物の寿命に縛られたく...これを回避する一つの方法は、それらのメンバ変数の構造体を作ることですが、どのような場合それらのメンバー変数は継承または他のクラスのみの機能が必要ですか?

すべてのオブジェクトは参照がなくなるとガベージコレクションのフラグが立てられますので、構造体の代わりにクラスを使用するだけです。ストラクチャーはクラスに比べて珍しい品種です。