【发布时间】:2008-09-25 16:08:22
【问题描述】:
我正在尝试在静态方法中使用 this 关键字,但编译器不允许我使用它。
为什么不呢?
【问题讨论】:
我正在尝试在静态方法中使用 this 关键字,但编译器不允许我使用它。
为什么不呢?
【问题讨论】:
这很容易。关键字“this”返回对包含它的类的当前实例的引用。静态方法(或任何静态成员)不属于特定实例。它们存在而不创建类的实例。在 MSDN 文档中还有更多 in depth explanation 说明静态成员是什么以及为什么/何时使用它们。
【讨论】:
作为附加说明,您可以从静态方法访问该类的静态成员。使下面的示例有效并且有时非常有用。
public static void StaticMethod(Object o)
{
MyClass.StaticProperty = o;
}
【讨论】:
静态方法是类特定的,而不是实例特定的。 “this”表示运行时类的一个实例,因此它不能在静态上下文中使用,因为它不会引用任何实例。 相反,应该使用类的名称,并且您只能访问类中的静态成员
【讨论】:
this表示当前实例对象,没有静态方法的实例。
【讨论】:
如果你想在静态函数中使用类的非静态函数。在静态函数中创建类的对象。 例如
Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}
【讨论】:
静态方法中没有this对象引用。
【讨论】:
对于 OP 的问题,请参阅接受的答案。此答案适用于那些正在寻找一种快速的单行列以在静态方法中使用的人。
如果该类是一个表单,并且它是开放的(您还需要表单的名称),则可以在静态方法中调用它;
Application.OpenForms["MainForm"];
【讨论】: