私はC#メモリ管理について質問があります。あなたは、クラスBは中クラスAの新しいインスタンスを作成し、見ることができるようにC#メモリ管理
public class B
{
public StringBuilder sb;
public B()
{
A a = new A();
sb = a.sbOne;
}
}
:
public class A
{
public StringBuilder sbOne = new StringBuilder();
public StringBuilder sbTwo = new StringBuilder();
public StringBuilder sbThree = new StringBuilder();
}
そして、もう一つのStringBuilderオブジェクトを持つ別の単純なクラス:私は3つのStringBuilderオブジェクトを持つ単純なクラスを持っている想像してみてそれはコンストラクタであり、StringBuilderフィールドをa.sbOneに代入します。この状況でどのようにメモリが解放されますか? a.sbTwoとa.sbThreeは、それらへの参照がないため、ガベージコレクションの対象となりますか?または、sbOneフィールドがまだ参照されているので、それらは離れているので、それらはメモリに保持されますか?
EDIT:DateTimeが構造体であるため、DateTimeをStringBuilderに変更するように編集されました。クラスであると仮定していました。
「DateTime」は* value *型であることに注意してください。ここには別のオブジェクトはありません...参照型を使用するようにサンプルを変更しますか? 'StringBuilder'かそれとも何か? –
Jon Skeetは、 'date'が' a.dateOne'への参照ではないことを意味します。 'DateTime'は構造体であるため、' a'は 'a.dateOne'の* copy *です。 –
私のせいです。私はDateTimeがクラスであり、構造体ではないと仮定していました。私の悪い。はい、代わりに同じ質問をStringBuilderと仮定します。 – mesman00