C#中结构和类的默认构造函数

本文探讨了C#中结构体和类在默认构造函数方面的差异。C#允许类在声明时对字段赋值初始化,而结构体则不允许,原因在于结构体的默认构造函数是隐式的,且不允许程序员自定义。C#的这种设计避免了二义性,并确保值类型的正确初始化。对于类,编译器会将初始化语句自动放到构造函数中,而结构体则需要显式赋值以符合编译要求。
摘要由CSDN通过智能技术生成

不想看我废话直接看这个链接就行:

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/new-operator

研究这个的起因还是C#的类的字段可以赋值初始化,而在C++中是不行的(除了const static int(枚举)这种成员变量),原因是类声明时并未分配空间,而后查了一些资料才得知这是C#编译器将初始化语句自动放到了构造函数中,这就对上了,可为什么结构不行呢?为什么不对结构也进行这种优化,使得可以在写结构时对一些字段直接赋值初始化呢?

用代码实测,发现不仅不能直接对字段赋值,还不能自定义结构的默认构造函数(C++可以),自定义带参数的构造函数还必须对所有字段赋值,我去,说好比C++简单点的呢?为啥要求这么多?

其实说到底,就是这个默认构造函数一个问题了:请记住,为 struct 声明默认构造函数是错误的,因为每个值类型均隐式含有公共默认构造函数。这句话的重点就是公共这个词了,也就是说C#编译器在遇到类似这样的代码࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值