Erro e solução para o método estático C# não podem acessar membros não estáticos
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:
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.
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; .
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.
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.
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