c# 为什么结构中不能有实例字段初始设定值项,结构中可以写类不?不要讲规定,求高手
2个回答
展开全部
不知道你知道堆栈概念不? 结构声明在 栈区 类声明在堆区 人们在操作计算机的时候只能操作栈区 那这样说怎么操作类呢? 就是在堆区的类 在栈区有一个地址 所以我们可以操作这个地址 而间接的操作类. 弄清楚这个概念后 就是结构和类了 结构直接存在栈区 所以栈区直接有值和地址 在运行时是直接调用的 所以如果没有值就会空指针异常. 所以 没有初始设定项 必须一开始直接赋值 . 结构中我记得不能写类. 如果能写就是在结构中引用某个类的堆地址 理论上也是可行的
追问
谢谢,但是我还是不明白 为什么就不能定义结构的时候给变量赋值?您能详细解释下么,谢谢您
追答
不用谢 值类型的变量赋值,是将内存中的真实数据复制一份赋给新的变量。那么在赋值之后内存中就将存在两份一模一样的数据。 我好想给你说错了...不好意思啊 上面那段话写的 值类型在栈区开辟空间 所以如果有直接赋值相当于 刚声明好 就有两个值 一个是 0 一个是你付给他的 值 这样的操作具有二义性 而且会有两个值的地址和一个对象的地址.我们究竟该取哪一个呢?? 刚才查了好几个文档... 我发现自己好几个概念都记错了.
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。
结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。 在使用值类型的集合(如 Dictionary)时,请务必记住这一点。
结构是值类型,而类是引用类型。
与类不同,结构的实例化可以不使用 new 运算符。
结构可以声明带参数的构造函数。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。 所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
结构可以实现接口。
结构可用作可以为 null 的类型,因而可向其赋 null 值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询