2016-12-14 129 views

回答

7

通常我们不能在静态方法中调用非静态方法。

这是一个过分简化:我们不能通过提供单个方法名称来调用我们自己类中的非静态方法,因为没有默认的“this”对象。当你写

SomeMethod(arg1, arg2); 

实例方法中,C#将其解释为

this.SomeMethod(arg1, arg2); 

相同的技巧没有一个静态方法里面工作,因为静态方法都以“这个”无法访问。

但是,如果我们使用类实例,那么我们可以做到上述。

这是因为一旦您提供了另一个对象,就没有必要查找“this”对象。

8

问题很简单:哪个实例你试图调用该方法吗?应该假设哪些本地字段?

对于实例方法,这很简单:当您调用SomeInstanceMethod()时,编译器会添加一个隐含的this.,因此对这些问题的答案是“当前的”(从技术角度而言,值为arg0)。所以当你输入SomeInstanceMethod()时,编译器假设你的意思是this.SomeInstanceMethod()

在静态方法的情况下,不存在可以添加的隐式this。您仍然可以调用实例方法,但您需要明确指定目标实例。 someObj.SomeInstanceMethod()将工作得很好。请注意,您也可以使用实例方法中的someObj.SomeInstanceMethod()在不同实例的上下文中调用该方法。

相关问题