Tar*_*rik 4 .net c# il struct nullable
为什么不C#编译器简单地调用默认的隐式的无参数.ctor,而不是intobj用于null分配的空值类型?
让我们说我们有代码:
Nullable<int> ex1 = new Nullable<int>();
Nullable<int> ex2 = null;
Nullable<int> ex3 = new Nullable<int>(10);
Run Code Online (Sandbox Code Playgroud)
这两行的IL输出如下所示:

它只调用.ctor最后一个语句,为什么我们不能拥有两个带有归零字段的第一个语句的实例?
为什么C#编译器不能简单地调用默认的隐式无参数
.ctor而不是intobj为null赋值的可空值类型?
因为Nullable<T>(或任何其他值类型)实际上没有无参数构造函数.您可以通过在反编译器中查看它或使用反射(例如typeof(Nullable<>).GetConstructors())来验证它.
如果你在C#中new T()为某些值类型编写T,它看起来像是调用无参数构造函数(并且C#规范也称它为构造函数),但这并不是实际发生的事情,因为.ctor在值类型上没有无参数方法.
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |