参照型よりも値型を使用するかどうかの決定は、パフォーマンスではなくセマンティクスに基づくべきであることを理解しています。値型に参照型メンバーを合法的に含めることができる理由がわかりません。これにはいくつかの理由があります。
1 つには、コンストラクターを必要とする構造体を構築するべきではありません。
public struct MyStruct
{
public Person p;
// public Person p = new Person(); // error: cannot have instance field initializers in structs
MyStruct(Person p)
{
p = new Person();
}
}
第二に、値型のセマンティクスのため:
MyStruct someVariable;
someVariable.p.Age = 2; // NullReferenceException
Person
コンパイラは、宣言で初期化することを許可しません。これをコンストラクターに移動するか、呼び出し元に依存するか、NullReferenceException
. これらの状況はどれも理想的ではありません。
.NET Framework には、値型内の参照型の例がありますか? いつこれを行う必要がありますか?