在 '通过C#CLR' 的page.170:C#中'this'的含义是什么?
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为null,但在调用非虚拟方法(GetFive)时,CLR需要知道p的数据类型,即Program。如果 GetFive确实被调用,则此参数的值将为null。由于在GetFive方法中没有使用参数 ,因此不会引发NullReferenceException。
请原谅我的愚蠢。我记得CLR通过'this'找到了真正的方法代码,它总是暗示着方法delcare中的第一个参数,为什么它说'调用非虚拟方法(GetFive)时,CLR需要知道p'的数据类型?
Ummmm什么????? –
但“GetFive”是一种实例方法,不是静态方法。即使您没有在“GetFive”方法中使用任何实例变量,运行时仍然需要知道该方法正在执行的对象实例。 – feathj
@Kirk Woll我认为这段文字是 – saus