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

问题描述 投票:31回答:7

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

为什么不?

c# .net
7个回答
64
投票

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


8
投票

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

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

6
投票

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


1
投票

这表示当前实例对象,并且没有静态方法的实例。


1
投票

如果要在静态函数中使用类的非静态函数。在静态函数中创建类的对象。对于Eg

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

0
投票

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


0
投票

对于OP的问题,请参阅接受的答案。这个答案适用于那些正在寻找在静态方法中使用快速衬垫的人。

如果类是一个表单,并且它是打开的(您还需要表单的名称),这可以在静态方法中调用;

Application.OpenForms["MainForm"];
© www.soinside.com 2019 - 2024. All rights reserved.