为什么在c# struct中不能在声明时初始化一个实例字段?

问题描述 投票:0回答:1

在c# -> struct中,我们不能在声明时给实例字段赋值。你能告诉我原因吗?谢谢。

举个简单的例子。

struct Test
{
  public int age =10; // it's not allowed.
}
c# struct
1个回答
2
投票

我认为答案很简单,但如果你不知道值类型和引用类型的区别,就很难掌握。

也许需要注意的是,引用类型存放在堆中,由垃圾收集器清理。而值类型是存放在堆中的。每当你定义一个作用域,比如。

{ 
}

一个新的本地栈就会被创建 一旦你退出这个作用域,堆栈上所有的值类型都会被处理掉,除非在堆上有一个引用类型。

由于引用类型和值类型的处理方式非常不同,所以在设计时也考虑到了这些变化。不能有空的构造函数,也不能在构造时赋值,这是一个逻辑上的结果。

我找到了一个非常老的stackoverflow问题,关于这个问题,他们也有一些简短的回答,关于它被设计成这样的性能原因。

为什么我不能在结构中初始化我的字段?

我的信息来源是70-483的参考书。

希望这能给你提供你所需要的信息。

© www.soinside.com 2019 - 2024. All rights reserved.