"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi une méthode statique ne peut-elle pas accès aux membres non statiques en C #?

Pourquoi une méthode statique ne peut-elle pas accès aux membres non statiques en C #?

Publié le 2025-03-24
Parcourir:659

Erreur et solution pour C # La méthode statique ne peut pas accéder aux membres non statiques

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

error: référence d'objet requis

]

L'extrait de code suivant démontre ce problème:

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

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

Cause du problème

]

Le message d'erreur indique que la méthode statique sumdata tente d'appeler un membre non statique setTextBoxText . Une méthode statique ne peut accéder qu'à des membres statiques, tandis que l'accès à des membres non statiques nécessite une référence à l'objet de la classe à laquelle il appartient.

solutions

Il existe plusieurs façons de corriger cette erreur:

  1. Définissez la méthode setTextBoxText sur statique:
public static void setTextboxText(int result)
]

Cependant, si la méthode setTextBoxText nécessite un accès à la variable d'instance, il ne peut pas être défini sur statique.

  1. Call de singleton statique setTextBoxText : ]
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}
Dans le constructeur de

form1 , instance doit être défini sur l'instance actuelle: instance = this; .

  1. Créer un form1 dans la méthode d'appel:
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
Si l'instance de

form1 existe déjà, cette méthode peut ne pas fonctionner.

  1. sumdata définir la méthode d'appel sumdata en tant que méthode d'instance non statique (appartient à form1 ):
private void SumData(object state)
{
    ...
    setTextboxText(result);
}

C'est généralement la meilleure solution car elle maintient l'encapsulation et la maintenabilité du code.

Pour plus d'informations, veuillez vous référer à la documentation MSDN.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3