为什么可以通过类实例在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”对象