规范没有要求
结构可以声明具有参数的实例构造函数。
这不是 必须的;因此,提供带参数的构造函数完全是可选的。设计师选择不这样做,所以给他们更多的权力;-)
还有什么其他原因?
简化设计?
让我们想象一下,框架设计者决定提供一个构造函数:
int myInt = new int(99999999999999999999999999999999999);
构造函数的复杂性现在增加了。为避免溢出错误,需要检查所提供值的范围。
所以简化也是反对提供构造函数的论据。
该规范还定义了“ simple-types ”的默认值。对于 int,它是 0。正如@KendallFrey 所提到的,有可能对整数的实例化进行了优化,但是,它们确实有一个构造函数——一个将值初始化为 0 的隐式默认构造函数。 IIRC(我会看看我是否可以挖掘它稍后出),简单类型实际上是由内存管理器实例化的。此处的其他构造函数逻辑也可能使问题复杂化。
执行语义?
正如@rich.okelly 提到的, int x = 12; 看起来不错;这样做的原因是因为我们经常将值类型语义理解为包括直接分配值。对我来说,引用类型赋值 var x = new RefType(); 一直推断分配和分配发生了不同的过程;新手用户可能会期望:
int x = new int(12);
和
XmlDocument x = new XmlDocument();
在某种程度上是等价的。
笔记:
我真的不相信这是一个除了在框架中实现它的任何人之外的任何人都可以回答的问题。