为什么不能在.Net的静态方法中使用关键字'this'?

n9vozmp4  于 2023-08-08  发布在  .NET
关注(0)|答案(8)|浏览(130)

我试图在静态方法中使用this关键字,但编译器不允许我使用它。
为什么不呢?

nx7onnlm

nx7onnlm1#

这很简单关键字“this”返回对包含它的类的当前示例的引用。静态方法(或任何静态成员)不属于特定的示例。它们在不创建类的示例的情况下存在。在MSDN文档中有更多关于什么是静态成员以及为什么/何时使用它们的in depth explanation

hgqdbh6s

hgqdbh6s2#

另外要注意的是,从Static方法中,您可以访问该类的或静态成员。使下面的例子有效,有时非常有用。

public static void StaticMethod(Object o)
{
     MyClass.StaticProperty = o;
}

字符串

slhcrj9b

slhcrj9b3#

静态方法是类特定的,而不是示例特定的。“this”表示类在运行时的一个示例,因此不能在静态上下文中使用this,因为它不会引用任何示例。相反,应该使用类的名称,并且只能访问类中的静态成员

syqv5f0l

syqv5f0l4#

这表示当前示例对象,并且不存在具有静态方法的示例。

wz1wpwve

wz1wpwve5#

如果你想在静态函数中使用类的非静态函数,在静态函数中创建类的对象。例如

Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}

字符串

voase2hg

voase2hg6#

静态方法中没有this对象引用。

j5fpnvbx

j5fpnvbx7#

对于OP的问题,请参考接受的答案。这个答案是为那些正在寻找一个快速的一行程序在静态方法中使用的人准备的。
如果类是一个窗体,并且它是开放的(您还需要窗体的名称),则可以在静态方法中调用它;

Application.OpenForms["MainForm"];

字符串

yhived7q

yhived7q8#

如果静态类有一个类似于'this'的关键字就好了,它只是引用静态类(而不是示例)。举例来说:

public static class MyMadeUpClassNameThatMayBeLong
    {
      private static int Metric = 1;
      private static bool UseMultiple = true;
      private static int GetMetric()
      {
        if (that.UseMultiple == true)
          return (2 * that.Metric);
        else
          return that.Metric;
    
        //same as:
        //if (MyMadeUpClassNameThatMayBeLong.UseMultiple == true)
        //  return 2 * MyMadeUpClassNameThatMayBeLong.Metric;
        //else
        //  return MyMadeUpClassNameThatMayBeLong.Metric;
      }
    }

字符串
我假设这个(那个)不存在,对吗?

相关问题