Estoy tratando de usar la palabra clave this
en un método estático, pero el compilador no me permitirá usarlo.¿Por qué no puede usar la palabra clave 'this' en un método estático en .Net?
¿Por qué no?
Estoy tratando de usar la palabra clave this
en un método estático, pero el compilador no me permitirá usarlo.¿Por qué no puede usar la palabra clave 'this' en un método estático en .Net?
¿Por qué no?
Eso es fácil. La palabra clave 'this' devuelve una referencia a la instancia actual de la clase que lo contiene. Los métodos estáticos (o cualquier miembro estático) no pertenecen a una instancia particular. Existen sin crear una instancia de la clase. Hay mucho más in depth explanation de lo que son los miembros estáticos y por qué/cuándo usarlos en los documentos de MSDN.
Los métodos estáticos son específicos de la clase y no específicos de la instancia. "this" representa una instancia de la clase en tiempo de ejecución, por lo que no se puede usar en un contexto estático porque no hará referencia a ninguna instancia. En su lugar, se debe utilizar el nombre de la clase y solo podrá acceder a los miembros estáticos en la clase
esto representa el objeto instancia actual y no hay instancia con métodos estáticos.
Como nota adicional, desde un método estático, puede acceder o miembros estáticos de esa clase. Hacer que el siguiente ejemplo sea válido y en ocasiones bastante útil.
public static void StaticMethod(Object o)
{
MyClass.StaticProperty = o;
}
no hay ninguna referencia this
objeto en el método estático.
Si desea utilizar la función no estática de la clase en la función estática. Cree el objeto de la clase en la función estática. Por ejemplo
Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}
Para la pregunta de OP, se refieren a la respuesta aceptada. Esta respuesta es para aquellos que buscan un trazador de líneas rápido para usar en métodos estáticos.
Si la clase es un formulario, y está abierto (también necesita el nombre del formulario), se puede invocar con un método estático;
Application.OpenForms["MainForm"];