"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que um método estático não pode acessar membros não estáticos em C#?

Por que um método estático não pode acessar membros não estáticos em C#?

Postado em 2025-03-24
Navegar:135

Erro e solução para o método estático C# não podem acessar membros não estáticos

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

Erro: Referência do objeto Necessário

]

O seguinte snippet de código demonstra este problema:

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

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

Causa do problema

]

A mensagem de erro indica que o método estático sumData tenta chamar um membro não estático setTextBoxText . Um método estático pode acessar apenas membros estáticos, enquanto o acesso a membros não estáticos exige uma referência ao objeto da classe à qual pertence.

soluções

Existem várias maneiras de corrigir este erro:

  1. Defina o método setTextBoxText para static:
public static void setTextboxText(int result)
]

No entanto, se o método setTextBoxText exigir acesso à variável de instância, ele não poderá ser definido como static.

  1. estático singleton Call setTextBoxText : ]
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}
No construtor de

Form1 , Instância precisa ser definido como a instância atual: instância = tes; .

  1. Crie um form1 no método de chamada:
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
Se a instância de

form1 já existe, esse método pode não funcionar.

  1. SUMDATA Defina o método de chamada SUMDATA como um método de instância não estático (pertence a form1 :
private void SumData(object state)
{
    ...
    setTextboxText(result);
}

Esta é geralmente a melhor solução porque mantém o encapsulamento e a manutenção do código.

Para obter mais informações, consulte a documentação do MSDN.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3