您的位置:首页 > 编程语言 > C#

c# 为什么结构中不能有实例字段初始设定值项

2016-03-30 16:59 253 查看
结构声明在 栈区 类声明在堆区 人们在操作计算机的时候只能操作栈区 那这样说怎么操作类呢? 就是在堆区的类 在栈区有一个地址 所以我们可以操作这个地址 而间接的操作类. 弄清楚这个概念后 就是结构和类了 结构直接存在栈区 所以栈区直接有值和地址 在运行时是直接调用的 所以如果没有值就会空指针异常. 所以 没有初始设定项 必须一开始直接赋值 . 结构中我记得不能写类. 如果能写就是在结构中引用某个类的堆地址 理论上也是可行的

值类型的变量赋值,是将内存中的真实数据复制一份赋给新的变量。那么在赋值之后内存中就将存在两份一模一样的数据。 我好想给你说错了...不好意思啊 上面那段话写的 值类型在栈区开辟空间 所以如果有直接赋值相当于 刚声明好 就有两个值 一个是 0 一个是你付给他的 值 这样的操作具有二义性 而且会有两个值的地址和一个对象的地址.我们究竟该取哪一个呢?? 刚才查了好几个文档... 我发现自己好几个概念都记错了.

在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。

结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。 在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。

结构是值类型,而类是引用类型。

与类不同,结构的实例化可以不使用 new 运算符。

结构可以声明带参数的构造函数。

一个结构不能从另一个结构或类继承,而且不能作为一个类的基。 所有结构都直接继承自 System.ValueType,后者继承自 System.Object。

结构可以实现接口。

结构可用作可以为 null 的类型,因而可向其赋 null 值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: