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

  • 本文关键字:静态方法 实例 调用 c# .net oop
  • 更新时间 :
  • 英文 :


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

这个问题简直就是:您要使用哪个实例来调用该方法?应该假设哪一套本地字段?

在实例方法的情况下,这很简单:当您调用SomeInstanceMethod()时,编译器添加了隐式this.,因此这些问题的答案是"当前一个"(以技术术语,arg0的值)。因此,当您键入SomeInstanceMethod()时,编译器假设您是指this.SomeInstanceMethod()

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

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

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

SomeMethod(arg1, arg2);

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

this.SomeMethod(arg1, arg2);

同一技巧在静态方法中不起作用,因为静态方法无法访问"此"。

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

那是因为一旦您提供了另一个对象,就无需查找"这个"对象。

最新更新