Heim >Backend-Entwicklung >C++ >Wie greife ich über C#-Ereignishandler auf nichtstatische Mitglieder zu?

Wie greife ich über C#-Ereignishandler auf nichtstatische Mitglieder zu?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-25 13:41:14872Durchsuche

How to Access Non-Static Members from Within C# Event Handlers?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn