我理解使用值类型还是引用类型的决定应该基于语义,而不是性能。但是我不明白为什么值类型可以合法地包含引用类型成员?原因有几个:
首先,我们不应该构建一个需要构造函数的结构体。
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 中是否有引用类型在值类型中的示例?什么情况下应该使用(如果有的话)?