在c# -> struct中,我们不能在声明时给实例字段赋值。你能告诉我原因吗?谢谢。
举个简单的例子。
struct Test
{
public int age =10; // it's not allowed.
}
我认为答案很简单,但如果你不知道值类型和引用类型的区别,就很难掌握。
也许需要注意的是,引用类型存放在堆中,由垃圾收集器清理。而值类型是存放在堆中的。每当你定义一个作用域,比如。
{
}
一个新的本地栈就会被创建 一旦你退出这个作用域,堆栈上所有的值类型都会被处理掉,除非在堆上有一个引用类型。
由于引用类型和值类型的处理方式非常不同,所以在设计时也考虑到了这些变化。不能有空的构造函数,也不能在构造时赋值,这是一个逻辑上的结果。
我找到了一个非常老的stackoverflow问题,关于这个问题,他们也有一些简短的回答,关于它被设计成这样的性能原因。
我的信息来源是70-483的参考书。
希望这能给你提供你所需要的信息。