为什么在C#中的静态方法中通过类实例调用非静态方法
答
通常我们不能在静态方法中调用非静态方法。
这是一个过分简化:我们不能通过提供单个方法名称来调用我们自己类中的非静态方法,因为没有默认的“this”对象。当你写
SomeMethod(arg1, arg2);
实例方法中,C#将其解释为
this.SomeMethod(arg1, arg2);
相同的技巧没有一个静态方法里面工作,因为静态方法都以“这个”无法访问。
但是,如果我们使用类实例,那么我们可以做到上述。
这是因为一旦您提供了另一个对象,就没有必要查找“this”对象。
答
问题很简单:哪个实例你试图调用该方法吗?应该假设哪些本地字段?
对于实例方法,这很简单:当您调用SomeInstanceMethod()
时,编译器会添加一个隐含的this.
,因此对这些问题的答案是“当前的”(从技术角度而言,值为arg0
)。所以当你输入SomeInstanceMethod()
时,编译器假设你的意思是this.SomeInstanceMethod()
。
在静态方法的情况下,不存在可以添加的隐式this
。您仍然可以调用实例方法,但您需要明确指定目标实例。 someObj.SomeInstanceMethod()
将工作得很好。请注意,您也可以使用实例方法中的someObj.SomeInstanceMethod()
在不同实例的上下文中调用该方法。