"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué un método estático no puede acceder a miembros no estáticos en C#?

¿Por qué un método estático no puede acceder a miembros no estáticos en C#?

Publicado el 2025-03-24
Navegar:230

Error y la solución para el método estático C# no pueden acceder a miembros no estáticos

Why Can't a Static Method Access Non-Static Members in C#?

Error: referencia de objeto requerido

]

El siguiente fragmento de código demuestra este problema:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

        private static void SumData(object state)
        {
            ...
            setTextboxText(result); // 错误:非静态字段、方法或属性
        }
    }
}

causa del problema

]

El mensaje de error indica que el método estático sumdata intenta llamar a un miembro no estático setTextBoxText . Un método estático solo puede acceder a miembros estáticos, mientras que acceder a miembros no estáticos requiere una referencia al objeto de la clase a la que pertenece.

soluciones

Hay varias formas de corregir este error:

  1. Establezca el método setTextBoxText a static:
public static void setTextboxText(int result)
]

Sin embargo, si el método settextBoxText requiere acceso a la variable de instancia, no se puede configurar en Static.

  1. static singleton call settextBoxText : ]
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}
en el constructor de

form1 , instancia debe establecerse en la instancia actual: instancia = this; .

  1. crea un form1 en el método de llamada:
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
Si la instancia de

form1 ya existe, este método no puede funcionar.

  1. sumdata Establezca el método de llamada sumdata como un método de instancia no estática (pertenece a form1 ):
private void SumData(object state)
{
    ...
    setTextboxText(result);
}

Esta suele ser la mejor solución porque mantiene la encapsulación del código y la capacidad de mantenimiento.

Para obtener más información, consulte la documentación de MSDN.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3