dotPeek、String.csで見つけました:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
[__DynamicallyInvokable]
public override bool Equals(object obj)
{
if (this == null)
throw new NullReferenceException();
string strB = obj as string;
if (strB == null)
return false;
if (object.ReferenceEquals((object) this, obj))
return true;
if (this.Length != strB.Length)
return false;
else
return string.EqualsHelper(this, strB);
}
2行目では、this == nullの場合、NullReferenceExceptionがスローされます。では、どのようにしてnullオブジェクトのメソッドを呼び出すことができますか?
MSDNによると: アプリケーションは、ここで説明するNullReferenceException例外ではなく、ArgumentNullException例外をスローすることに注意してください。
次のMicrosoft中間言語(MSIL)命令は、NullReferenceExceptionをスローします。
callvirt
cpblk
cpobj
initblk
ldelem.<type>
ldelema
ldfld
ldflda
ldind.<type>
ldlen
stelem.<type>
stfld
stind.<type>
throw
unbox
取得すると、メソッド本体に入る前に例外がスローされます。右?では、メソッドからNullReferenceExceptionをスローする必要があるのは何ですか?__DynamicallyInvokableAttribute
チェックをバイパスしてメソッドを強制的に呼び出すことはできますか?または、他の何か?
ありがとう。