Heim >Backend-Entwicklung >C++ >Wie greife ich über C#-Ereignishandler auf nichtstatische Mitglieder zu?
Zugriff auf nicht statische Mitglieder innerhalb von Ereignishandlern
In C# ist für den Zugriff auf nicht statische Mitglieder innerhalb von Ereignishandlern eine Objektreferenz erforderlich. Wenn jedoch der Fehler „Für den Zugriff auf nicht-statische Felder, Methoden oder Eigenschaften ist eine Objektreferenz erforderlich“ auftritt, ist möglicherweise unklar, wie dieser behoben werden kann.
Das Problem tritt auf, wenn Ereignishandler zum Aufrufen von Methoden verwendet werden die auf instanzspezifische Eigenschaften oder Variablen zugreifen. Um dieses Problem zu beheben, gibt es zwei Möglichkeiten:
1. Mitglieder und Ereignishandler als statisch deklarieren
Diese Methode beinhaltet die Deklaration der Timer-Rückrufe als Delegate-Ereignisse und der Mitgliedsvariablen als statisch innerhalb der Klasse. Dies ermöglicht den Zugriff auf die nicht statischen Mitglieder, ohne dass eine Objektreferenz erforderlich ist. Es führt jedoch zu einer Abhängigkeit vom globalen Zustand, die aus Gründen der Testbarkeit und Wartbarkeit im Allgemeinen nicht empfohlen wird.
2. Erstellen Sie eine Instanz der Klasse
Alternativ kann eine Instanz der Klasse erstellt werden und die Ereignishandler Methoden innerhalb dieser Instanz zugewiesen werden. Dadurch wird eine ordnungsgemäße Objektreferenz erstellt und der Zugriff auf nicht statische Mitglieder ermöglicht.
Zum Beispiel:
MainClass instance = new MainClass(); btn.Clicked += instance.StartClick; btn_stop.Clicked += instance.StopClick;
Die Wahl zwischen diesen beiden Ansätzen hängt vom spezifischen Kontext der Anwendung ab. Wenn der globale Status kein Problem darstellt, kann die Deklaration von Mitgliedern und Ereignishandlern als statisch eine geeignete Option sein. Für Szenarien, die Testbarkeit erfordern und einen globalen Status vermeiden, wird jedoch empfohlen, eine Instanz der Klasse zu erstellen.
Durch das Verständnis der zugrunde liegenden Fehlerursache und der verfügbaren Lösungen können Entwickler dieses Problem effektiv lösen und eine starke Lösung aufrechterhalten Verständnis der objektorientierten Programmierprinzipien in C#.
Das obige ist der detaillierte Inhalt vonWie greife ich über C#-Ereignishandler auf nichtstatische Mitglieder zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!