为什么可以通过类实例在C#中的静态方法中调用非静态方法

为什么可以通过类实例在C#中的静态方法中调用非静态方法,c#,.net,oop,C#,.net,Oop,通常我们不能在静态方法中调用非静态方法。但是如果我们使用一个类实例,那么我们就可以完成上面的工作。类实例是如何为我们实现的?问题很简单:您试图在哪个实例上调用该方法?应该假设哪一组本地字段 对于实例方法,这很简单:当您调用SomeInstanceMethod()时,编译器会添加一个隐式的this.,因此这些问题的答案是“当前一个”(从技术上讲,是arg0的值)。因此,当您键入SomeInstanceMethod()时,编译器假定您的意思是this.SomeInstanceMethod() 对于静

通常我们不能在静态方法中调用非静态方法。但是如果我们使用一个类实例,那么我们就可以完成上面的工作。类实例是如何为我们实现的?

问题很简单:您试图在哪个实例上调用该方法?应该假设哪一组本地字段

对于实例方法,这很简单:当您调用
SomeInstanceMethod()
时,编译器会添加一个隐式的
this.
,因此这些问题的答案是“当前一个”(从技术上讲,是
arg0
的值)。因此,当您键入
SomeInstanceMethod()
时,编译器假定您的意思是
this.SomeInstanceMethod()

对于静态方法,没有可以添加的隐式
this
。您仍然可以调用实例方法,但需要显式指定目标实例
someObj.SomeInstanceMethod()
可以正常工作。请注意,您还可以使用实例方法中的
someObj.SomeInstanceMethod()
在不同实例的上下文中调用该方法。

问题很简单:您试图在哪个实例上调用该方法?应该假设哪一组本地字段

对于实例方法,这很简单:当您调用
SomeInstanceMethod()
时,编译器会添加一个隐式的
this.
,因此这些问题的答案是“当前一个”(从技术上讲,是
arg0
的值)。因此,当您键入
SomeInstanceMethod()
时,编译器假定您的意思是
this.SomeInstanceMethod()

对于静态方法,没有可以添加的隐式
this
。您仍然可以调用实例方法,但需要显式指定目标实例
someObj.SomeInstanceMethod()
可以正常工作。请注意,您还可以从实例方法中使用
someObj.SomeInstanceMethod()
,在不同实例的上下文中调用该方法

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

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

SomeMethod(arg1, arg2);
在实例方法中,C#将其解释为

this.SomeMethod(arg1, arg2);
同样的技巧在静态方法中不起作用,因为静态方法无法访问“this”

但是如果我们使用一个类实例,那么我们就可以完成上面的工作

这是因为一旦您提供了另一个对象,就不需要寻找“this”对象

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

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

SomeMethod(arg1, arg2);
在实例方法中,C#将其解释为

this.SomeMethod(arg1, arg2);
同样的技巧在静态方法中不起作用,因为静态方法无法访问“this”

但是如果我们使用一个类实例,那么我们就可以完成上面的工作

这是因为一旦您提供了另一个对象,就不需要寻找“this”对象