![]() |
1
7
在不同的地方,从 一致性 将值类型视为具有无参数构造函数的观点。您总是可以在不提供任何参数的情况下创建一个值,这在cli和c_中都是正确的。在C中,您只需使用标准构造函数语法:
而不是只有一种语法和调用“real”构造函数的不同语法。 注意,对于C 2,有一个默认值操作符,我想是这样的。 能够 已改为:
这感觉更接近于IL产生的,真的。我想,如果我们从这个开始,C可能不会“假装”所有的值类型都有无参数的构造函数。 另一方面,考虑泛型:
值类型是否允许这样做?它
是
-但如果C不允许
一个有趣的点,你可能想更深入地看-虽然C不允许你定义一个自定义值类型的无参数构造函数,但是你可以在IL中这样做,C将 有时 根据上下文使用它(有时不使用)。见 my blog entry for more details . |
![]() |
2
0
你不能改变。所以效果是一样的,只是定义不同。 |
![]() |
3
0
值类型和类类型之间的一个重要区别是,与值类型实例不同,类类型实例只能通过调用构造函数来实现,并且在构造函数完成或显式公开正在构造的对象之前,不会向外部世界公开。相比之下,通过使用值类型字段创建封闭结构或类类型实例,或通过创建值类型元素数组,值类型实例将得以存在。虽然没有任何技术上的原因可以解释为什么微软不允许为结构定义显式的无参数构造函数,但要确保每个结构在暴露于外部世界之前都能运行它的无参数构造函数是很困难的,如果有这样一个构造函数R,这会让人困惑。联合国在某些情况下,但不包括其他情况。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |