繁体   English   中英

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

[英]Why calling non-static method inside a static method in C# possible via class instance

通常,我们不能在静态方法内调用非静态方法。 但是,如果我们使用类实例,则可以执行上述操作。 类实例如何使我们成为可能?

问题很简单:您尝试在哪个实例上调用该方法? 应该假定哪些本地字段集?

对于实例方法,这很简单:当您调用SomeInstanceMethod() ,它是隐式的this. 是由编译器添加的,所以这些问题的答案是“当前问题”(从技术角度来说,这是arg0的值)。 因此,当您键入SomeInstanceMethod() ,编译器会假设您的意思是this.SomeInstanceMethod()

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

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

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

SomeMethod(arg1, arg2);

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

this.SomeMethod(arg1, arg2);

在静态方法内部无法使用相同的技巧,因为静态方法无法访问“ this”。

但是,如果我们使用类实例,则可以执行上述操作。

这是因为一旦提供了另一个对象,就无需寻找“这个”对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM