通常,我们无法在静态方法中调用非静态方法。但是,如果我们使用类实例,那么我们可以执行以上操作。类实例如何使我们成为可能?
这个问题简直就是:您要使用哪个实例来调用该方法?应该假设哪一套本地字段?
在实例方法的情况下,这很简单:当您调用SomeInstanceMethod()
时,编译器添加了隐式this.
,因此这些问题的答案是"当前一个"(以技术术语,arg0
的值)。因此,当您键入SomeInstanceMethod()
时,编译器假设您是指this.SomeInstanceMethod()
。
在静态方法的情况下,没有可以添加隐式的this
。您仍然可以调用实例方法,但是您需要明确指定目标实例。someObj.SomeInstanceMethod()
可以正常工作。请注意,您还可以使用实例方法中的someObj.SomeInstanceMethod()
在不同实例的上下文中调用该方法。
通常我们无法在静态方法中调用非静态方法。
这是一个总体简化的:我们不能通过提供单个方法名称来调用自己类中的非静态方法,因为没有默认的"此"对象。当你写
时SomeMethod(arg1, arg2);
在实例方法中,C#将其解释为
this.SomeMethod(arg1, arg2);
同一技巧在静态方法中不起作用,因为静态方法无法访问"此"。
但是,如果我们使用类实例,则可以执行上述。
那是因为一旦您提供了另一个对象,就无需查找"这个"对象。