22 Stimmen

Erweiterungsmethode vs. Hilfsklasse

Möglicher Duplikat:
Erweiterungsmethoden vs Statische Utility-Klasse

Ich baue eine API mit allgemeinen Funktionen, die Aktionen basierend auf Objekten in .NET ausführen. Zum Beispiel habe ich eine Funktion erstellt, die prüft, ob ein String eine E-Mail-Adresse ist.

Ich könnte entweder haben:

static bool IsEmailAddress(string text)
{
    return IsMail(text);
}

oder ich könnte eine Erweiterungsmethode erstellen, die wie folgt verwendet würde:

string text = "HalloWelt@Email.com";
if (text.IsEmailAddress())
{
}

welche ist geeigneter, oder glauben Sie, dass ich, da dies eine Bibliothek für allgemeine Zwecke ist, es technisch gesehen beide Möglichkeiten implementieren und den Entwickler entscheiden lassen könnte, welche für sie am besten ist?

19voto

Steven Punkte 157957

Das Erstellen einer Erweiterungsmethode bedeutet, dass sie automatisch im Intellisense angezeigt wird, wenn ein Benutzer diesen Typ verwendet. Sie müssen darauf achten, nicht zu viel Lärm in die Liste der von Entwicklern durchsuchten Methoden zu bringen (besonders bei der Erstellung eines wiederverwendbaren Frameworks). Wenn diese Methoden nur in einem bestimmten Kontext verwendbar sind, sollten Sie wahrscheinlich "normale" statische Methoden verwenden. Besonders bei der Implementierung von Erweiterungsmethoden für allgemeine Typen wie string.

Nehmen Sie zum Beispiel eine ToXml(this string) Erweiterungsmethode oder eine ToInt(this string) Erweiterungsmethode. Obwohl es ziemlich praktisch erscheint, diese Erweiterungsmethoden zu haben, ist die Konvertierung von Text in XML nichts, was Sie während der gesamten Anwendung tun würden, und es wäre genauso einfach, XmlHelper.ToXml(someString) zu verwenden.

Nur noch schlimmer ist es, eine Erweiterungsmethode auf object hinzuzufügen.

Wenn Sie ein wiederverwendbares Framework schreiben, ist das Buch Framework-Design-Guidelines von Krzysztof Cwalina ein absolutes Muss.

2voto

Aghilas Yakoub Punkte 27861

Ich bevorzuge die Erweiterungsmethode, weil dein Code elegant ist und du eine Erweiterungsmethode auf einer versiegelten Klasse des Frameworks definieren kannst.

2voto

banging Punkte 2502

Die Frage ist, auf welches .NET Framework wird das Ziel sein? Wenn < 3.5, dann stehen keine Erweiterungsmethoden zur Verfügung. Andernfalls, warum würden Sie eine neue Klasse erstellen?

1voto

MikeSW Punkte 15755

Eine Erweiterungsmethode ist automatisch Teil einer statischen Klasse. Das bedeutet, dass der Verbraucher entweder die Erweiterungsmethoden verwenden oder die statische Methode aus der Klasse aufrufen kann, wenn sie es möchte. Ich verwende Erweiterungsmethoden so oft wie möglich, sie sind einfacher zu entdecken, wenn sie im richtigen Namespace platziert sind.

1voto

Jacek Gorgoń Punkte 3167

Erweiterungsmethoden ermöglichen es Entwicklern, nicht genau zu wissen, wie die Hilfsklasse heißt und wo sie sich befindet, geschweige denn, dass sie überhaupt existiert. Beachten Sie jedoch, dass Sie immer noch ihren Namespace im using-Klausel angeben müssen - vielleicht platzieren Sie sie in einem gemeinsamen, obersten Namespace für Ihre Anwendung.

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