C#コンパイラが次の割り当てをどのように処理するかを誰かが知っているかどうか疑問に思っていました:
int? myInt = null;
私の仮定では、暗黙的な変換が実行されていると思いますが、null リテラルの割り当てがどのように処理されるかわかりません。System.Nullable オブジェクトを逆アセンブルしたところ、暗黙の演算子がこれにオーバーライドされていることがわかりました。
public static implicit operator T?(T value) {
return new T?(value);
}
これが呼び出されると、2 次コンストラクターを起動しようとします。
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
これが私の混乱の出番です... this.value は何らかの値型であり、null にすることはできません。
それで、この「魔法」がどのように行われるかを知っている人はいますか...または、セカンダリコンストラクターが呼び出されると仮定するのは間違っていますか? コンパイラは、2 番目のコンストラクターの署名を null リテラルと一致させることができないことを知っているため、既定のコンストラクターが呼び出されますか (その結果、myInt が新しい「null」Nullable に割り当てられます)。