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'?
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:
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>
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>
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>
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:
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!