26 Stimmen

Warum kann eine statische Methode in einer nicht-statischen Klasse keine Erweiterungsmethode sein?

Mögliches Duplikat:
Erweiterungsmethode erfordert, dass die Klasse statisch ist

In .NET:

Warum kann ich nicht statische Methode en nicht-statische Klasse eine Erweiterungsmethode sein?

37voto

StriplingWarrior Punkte 141402

Eric Lippert wird sich wahrscheinlich mit einer wirklich guten Antwort zu diesem Thema zu Wort melden, aber das Wesentliche wird wohl sein:

Wir haben beschlossen, dass es sowohl für die Programmierer als auch für den Compiler einfacher ist, wenn wir die Anzahl der Stellen, an denen man nach Erweiterungsmethoden suchen muss, begrenzen.

Diese Politik zwingt die Benutzer dazu, alle ihre Erweiterungsmethoden in einige wenige spezielle Klassen zu packen, die für diesen Zweck bestimmt sind.

1voto

Ed S. Punkte 118985

Denn so ist es nun einmal.

Meine Vermutung wäre, dass das Zulassen von statischen Erweiterungsmethoden die Sprache komplizierter machen würde (jedes Feature erhöht die Komplexität auf die eine oder andere Art), während es fast keinen Nutzen bringt. Wenn Sie eine statische Methode definieren auf String Was nützt das, wenn man einfach eine eigene Klasse mit der gleichen statischen Methode definieren kann?

Erweiterungsmethoden auf Instanzebene sind nützlich, weil sie mit dem aktuellen Zustand einer Typinstanz arbeiten. Die statische Methode hat keinen Kontext, so dass sie keinen Nutzen gegenüber einer statischen Methode bietet, die an anderer Stelle definiert ist, abgesehen von der logischen Gruppierung (d.h. der Definition einer String.IsNullOrFullOfSomeChar(char c) würde es logischerweise Sinn machen, zu den String Klasse, aber abgesehen davon gibt es keinen Vorteil. Und ja, das wäre eine furchtbare Methode, nur ein Beispiel).

Erweiterungsmethoden sind durch LINQ entstanden. Sie wurden implementiert, damit LINQ so funktioniert, wie es die Entwickler wollten. Statische Erweiterungen waren nicht erforderlich und wurden daher auch nicht implementiert.

0voto

IAbstract Punkte 19409

Es ist sinnvoll, dass eine statische Klasse über Erweiterungsmethoden verfügen muss. Der Hauptgrund ist, dass die statische Klasse zustandslos ist, d.h. man muss die Klasse nicht instanziieren, aber das ist nur mein Bauchgefühl. Sonst würde es für mich keinen Sinn machen.

Ich denke auch, dass der Zwang, Erweiterungsmethoden in öffentlichen/internen statischen Klassen unterzubringen, die Kosten für ihre Verwendung reduziert.

-2voto

TheCodeKing Punkte 18776

Zur Kompilierungszeit, wenn Sie den Instanzsyntaxzucker für Erweiterungsmethoden verwenden, wird dies in einen Aufruf der statischen Methode (die die Erweiterung definiert) umgewandelt und durch Ihre Instanz geleitet.

Abgesehen von der netten Syntax ist es nicht anders, als wenn Sie eine statische Methode implementieren und Ihre Instanz als Argument durchreichen. Das ist genau das, was passiert. Mit statischen Klassen ist dies nicht möglich, da Sie eine statische Klasse nicht als Parameter an eine Methode übergeben können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X