【发布时间】:2012-05-02 13:52:04
【问题描述】:
我了解,使用值类型而不是引用类型的决定应该基于语义,而不是性能。我不明白为什么值类型可以合法地包含引用类型成员?这有几个原因:
首先,我们不应该构建一个需要构造函数的结构。
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 是否有值类型中的引用类型示例?我们什么时候应该这样做(如果有的话)?
【问题讨论】:
-
这里有一些现有的讨论可以查看:stackoverflow.com/questions/945664/…
标签: c# value-type reference-type