Maison >développement back-end >C++ >Pourquoi 'CS0120: une référence d'objet est-elle requise ...' se produit-il lors de l'appel d'une méthode non statique à partir d'une méthode statique?

Pourquoi 'CS0120: une référence d'objet est-elle requise ...' se produit-il lors de l'appel d'une méthode non statique à partir d'une méthode statique?

DDD
DDDoriginal
2025-02-02 17:51:11681parcourir

Why Does

Erreur: "CS0120: Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique 'foo'"

Scénario:

Considérons le code suivant:

private static void SumData(object state)
{
    // Calling a non-static member from a static method
    setTextboxText(result);
}

Explication:

L'erreur "CS0120" se produit lorsque vous essayez d'accéder à un membre non statique ( champ, méthode ou propriété) à partir d'un contexte statique. Dans ce cas, la méthode SetTextBoxText est un membre non statique de la classe FORM1, et il ne peut pas être accessible à partir de la méthode statique SumData.

Solutions possibles:

  • Rendre le membre non statique statique:
static void setTextboxText(int result)
{
    // Implementation details
}
  • Utilisez un singleton statique de forme1:
class Form1
{
    public static Form1 It;

    public Form1()
    {
        It = this;
    }

    private static void SumData(object state)
    {
        Form1.It.setTextboxText(result);
    }
}
  • passez une instance de Form1 à la méthode d'appel:
private static void SumData(Form1 form, object state)
{
    form.setTextboxText(result);
}
  • Faire la méthode d'appel non Statique:
private void SumData(object state)
{
    setTextboxText(result);
}

Informations supplémentaires:

  • Les membres statiques ne peuvent accéder qu'à d'autres membres statiques.
  • Les membres non statiques peuvent accéder à des membres statiques et non statiques.
  • Si une instance de la classe n'est pas disponible pendant l'appel à un membre non statique, vous pouvez créer une nouvelle instance ou utiliser des singletons statiques pour accéder au membre non statique.
  • Reportez-vous à MSDN pour plus d'informations sur cette erreur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn