我知道在引用类型上使用值类型的决定应该基于语义,而不是性能。我不明白为什么值类型可以合法地包含引用类型成员?这有几个原因:
一方面,我们不应该构建一个需要构造函数的结构。
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 是否有值类型中的引用类型示例?我们什么时候应该这样做(如果有的话)?