На стр.170 «CLR via C #»:
public sealed class Program {
public Int32 GetFive() { return 5; }
public static void Main() {
Program p = null;
Int32 x = p.GetFive(); // In C#, NullReferenceException is thrown
}
}
Теоретически, код выше в порядке. Конечно, переменная p равна нулю, но при вызове не виртуальной
Метод (GetFive), CLR должен знать только тип данных p, который является программой. Если
GetFive действительно вызывается, значение этого аргумента будет нулевым. Поскольку аргумент
не используется внутри метода GetFive, не генерируется исключение NullReferenceException.
Прошу прощения за мою глупость. Я помню, что CLR действительно находит код метода по 'this', который всегда косвенно появляется в первом аргументе метода delcare, почему он говорит 'при вызове не виртуального
Метод (GetFive), CLR должен знать только тип данных p '?