Maison >développement back-end >C++ >Comment résoudre l'erreur C # CS0120: 'Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique'?

Comment résoudre l'erreur C # CS0120: 'Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique'?

Linda Hamilton
Linda Hamiltonoriginal
2025-02-02 17:56:09386parcourir

How to Resolve the C# CS0120 Error:

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

Cette erreur survient lorsque vous essayez d'accéder à un membre non statique (champ, méthode ou propriété) dans un contexte statique, comme une méthode statique ou une propriété statique.

Scénario:

Imaginez ce code:

<code class="language-csharp">public partial class MyForm : Form
{
    private void MyMethod(object sender, EventArgs e)
    {
        // Error: Accessing a non-static member from a static method
        UpdateLabel(someValue); 
    }

    private void UpdateLabel(string text)
    {
        myLabel.Text = text; // myLabel is a non-static member (control)
    }
}</code>

Solutions:

Plusieurs approches peuvent résoudre ce problème:

  1. Rendre le membre statique: Le cas échéant, modifiez le membre accessible à static. Cela ne fonctionne que si le membre ne s'appuie pas sur des données spécifiques à l'instance.

    <code class="language-csharp">public static void UpdateLabel(string text) // Now static
    {
        // Access static members only here!  You can't access myLabel directly.
    }</code>
  2. Singleton Pattern: Utilisez un singleton pour accéder à l'instance de votre classe. Cela convient lorsque vous n'avez besoin que d'une seule instance de la classe.

    <code class="language-csharp">public partial class MyForm : Form
    {
        private static MyForm _instance; // Singleton instance
    
        public static MyForm Instance
        {
            get { return _instance ?? (_instance = new MyForm()); }
        }
    
        private MyForm() { } // Private constructor
    
        private void MyMethod(object sender, EventArgs e)
        {
            Instance.UpdateLabel(someValue); 
        }
    
        // UpdateLabel remains non-static
    }</code>
  3. Instancier la classe: Créez une instance de la classe dans la méthode statique.

    <code class="language-csharp">private static void MyMethod(object sender, EventArgs e)
    {
        var form = new MyForm();
        form.UpdateLabel(someValue);
    }</code>
  4. Rendre la méthode d'appel non statique: La solution la plus simple consiste souvent à faire de la méthode qui appelle le membre non statique non statique.

    <code class="language-csharp">private void MyMethod(object sender, EventArgs e) // Remains non-static
    {
        UpdateLabel(someValue); 
    }</code>

Lire plus approfondie:

  • Consulter la documentation de Microsoft sur l'erreur CS0120 pour des informations plus détaillées.
  • Considérez attentivement les implications de chaque solution. Le choix de la bonne approche dépend de la conception de votre application et du contexte spécifique du code.

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