using System;
public class C {
public void Main() {
int j1=5;
int? j=7;
}
}
这里是初始化j1
和j
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldloca.s 1
IL_0005: ldc.i4.7
IL_0006: call instance void valuetype [System.Runtime]System.Nullable`1<int32>::.ctor(!0)
从 IL 我可以看到,当我使用 Int32 时,没有构造函数被调用,但是当我使用 Nullable 时,构造函数被调用以便将值放入变量中。
为什么?
我只能想象这是因为 Nullable 类型必须能够为 null,但不可为 nullable 和 nullable ints 在内部都是结构。那么,为什么 Int32 没有构造函数?
所有这些都考虑到了 Jon skeet 的回答,即当一个可为 null 的 int32 为 null 时,它不指向任何地方,而是它自己为 null。 ? (nullable) operator in C#
最佳答案
这是 Reference Source of struct Nullable<T>
.
它有这个构造函数:
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
还有 Value
和 HasValue
属性是 getter-only。这意味着必须调用构造函数来为 Nullable<T>
赋值。 .
没有像独立可空 7
这样的东西持续的。 Nullable<T>
包装分配给它的值。
顺便说一下,null
通过直接将内存位置设置为0并根据Jb Evain's answer to: How does the assignment of the null literal to a System.Nullable type get handled by .Net (C#)?绕过构造函数来分配.
关于c# - 实例化可空值类型时调用的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73511062/