通常我们不能在静态方法中调用非静态方法.但是如果我们使用类实例,那么我们就可以做到.类实例如何使我们成为可能?
问题很简单:你试图在哪个实例上调用该方法?应该假设什么样的本地字段?
在实例方法的情况下,这很简单:当您调用时SomeInstanceMethod(),this.编译器会添加隐式,因此这些问题的答案是"当前的"(在技术术语中,是值arg0).因此,当您键入时SomeInstanceMethod(),编译器会假设您的意思this.SomeInstanceMethod().
在静态方法的情况下,没有隐含的this可以添加.您仍然可以调用实例方法,但需要显式指定目标实例.someObj.SomeInstanceMethod()会工作得很好.请注意,您还可以使用someObj.SomeInstanceMethod()实例方法在其他实例的上下文中调用该方法.
通常我们不能在静态方法中调用非静态方法.
这是一个粗略的过度简化:我们不能通过提供单个方法名称在我们自己的类中调用非静态方法,因为没有默认的"this"对象.当你写作
SomeMethod(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
在实例方法中,C#将其解释为
this.SomeMethod(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
同样的技巧在静态方法中不起作用,因为静态方法无法访问"this".
但是如果我们使用类实例,那么我们就可以做到.
那是因为一旦你提供了另一个对象,就没有必要寻找"this"对象了.