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

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


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

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

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

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

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

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

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

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

结构可以实现接口。

结构可用作可以为 null 的类型,因而可向其赋 null 值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值