So fügen Sie der MessageBox eine Erweiterungsmethode hinzu

8

ist es möglich?

basiert auf den Beispielen eines anderen, wie LabelExtesios, StringExtensions usw. Ich schrieb dies:

%Vor%

dann:

%Vor%

Fehler: MessageBox.Foo ();

%Vor%     
Jack 31.12.2011, 13:55
quelle

4 Antworten

9

Beschreibung

Das kann nicht gemacht werden, weil System.Windows.Forms.MessageBox NICHT eine Instanz von MessageBox ist. MessageBox.Show() ist eine statische Methode.

Sie können keine Instanz von MessageBox erstellen, da diese Klasse keinen öffentlichen Konstruktor hat.

Aktualisieren

Sie können jedoch Ihre eigene Klasse im Namensraum System.Windows.Forms erstellen und die MessageBox in dieser Methode wie folgt

Beispiel

%Vor%     
dknaack 31.12.2011, 14:02
quelle
4

Sie vermissen das Keyword aus Ihrer Erweiterungsmethode.
Aber da System.Windows.Forms.MessageBox keinen öffentlichen Konstruktor hat, nur statische Factory-Methoden (die DialogResult zurückgeben), können Sie keine eigenständige MessageBox -Instanz erstellen, um Ihre Erweiterungsmethode darauf aufzurufen.

Also, um deine Frage zu beantworten:
Ja, es ist möglich, eine Erweiterungsmethode für MessageBox zu erstellen (siehe andere Antworten), aber Sie können sie nicht von MessageBox.Foo() aufrufen. Sie benötigen eine Instanz von MessageBox , was Sie nicht erstellen können, damit es nicht funktioniert.

    
nemesv 31.12.2011 14:06
quelle
2

Sie müssen der Erweiterungsmethode einen Parameter vom Typ MessageBox hinzufügen:

%Vor%

Erstellen Sie vor dem Aufruf der Methode

eine Instanz der MessageBox %Vor%

[Aktualisierung: Leider funktioniert das nicht im Fall von MessageBox , da es keinen öffentlichen Konstruktor gibt. Danke an nemesv für den Hinweis. Das folgende Beispiel sollte theoretisch funktionieren, aber in der Praxis wird es nicht funktionieren. Ich werde es als Referenz verlassen.]

In Ihrem Beispiel rufen Sie die Methode für die Klasse selbst auf. Erweiterungsmethoden gelten nur für Instanzen. Hier ist eine Version Ihres Codes mit den oben genannten Korrekturen:

%Vor%     
Dennis Traub 31.12.2011 13:58
quelle
0

Sie müssen den Erweiterungsmethodenparameter mit einem this -Modifikator qualifizieren, damit er als Erweiterungsmethode registriert wird.

%Vor%     
Rotem 31.12.2011 13:59
quelle

Tags und Links