Ich persönlich empfinde Erweiterungsmethoden, die mit C# 3.0 bzw. VB.NET 9.0 eingeführt wurden, als eine große Bereicherung im täglichen Kampf mit dem eigenen Code.
Wo man früher meist eine Klasse namens Tools oder ähnliches hatte, in der kleine Genralwerkzeuge untergebracht wurden, die Microsoft in der Eile vergessen hatte in
die Sprache einzubauen, erweitert man heute einfach den benötigten Datentyp und gut.
Hat man zum Beispiel irgendwo einen String, der eigentlich keiner ist, sondern ein Zahl kann man folgende Routine auf ihn loslassen und dann damit weiterrechnen:
Dim intValue As Integer = Convert(strValue, Integer)
intSum = intValue + 2
...
Oder man schreibt sich eine kleine Erweiterungsmethode namens ToInt und bohrt damit den String-Datentyp auf, sodass von obigem Beispiel im Endeffekt
nur folgendes übrig bleibt:
intSum = strValue.ToInt + 2
Ich selbst habe mir schon eine Handvoll solcher Extensions geschrieben und möchte sie nicht mehr missen. Microsoft selbst hat diese Technik auch ganz besonders lieb,
basiert doch LINQ in all seinen Farben, Formen und Variationen darauf.
The Edge Extensions Project
Kevin Nessland, ein Entwickler aus den USA, hat auf Codeplex vor geraumer Zeit das The Edge Extensions Project aus
der Taufe gehoben und in zwei Assembly's ein ungeheure Menge (ich hab irgendwann aufgehört zu zählen) an Erweiterungsmethoden gesammelt und mit ein paar Tools angereichert.
Eingeordnet in 20 Kategorien sind so praktische Dinge wie Base64Encode/Base64Decode, Encrypt/Decrypt,
WordCount oder IsValidIPAddress für den Datentyp String oder
Age, FirstWorkDayOfCurrentFiscalYear oder IsLeapYear für Date dabei.
Highlights sind für mich Object.ToJson, mit der man die Eigenschaften eines Objektes in JSON-Code umsetzen kann und
WebControl.FindControlRecursive, um in verschachtelten ASP.NET-Konstrukten einfach auf ein bestimmtes Steuerelement durchgreifen zu können.
Ich schätze mal, das die beiden Assembly's Edge.Extension.dll und Edge.Utilities.dll von nun an zu meinem Projektstandards gehören werden, so stark wie sie sind.
Eine Handvoll Code aus den Edge.Utilities referenziert auf Dritt-Assembly's, was für meinen Geschmack nicht unbedingt sein muss und so flogen die Dinger recht schnell
aus dem Source-Code raus.
ACHTUNG: Es gibt in der vorliegenden Version für VB.NET-Entwickler ein kleines Rattenloch, das unbedingt zugeschüttet werden muss: Nessland hat seinen Code in C# geschrieben und
unter anderem eine Methode namens IsDBNull in den ObjectExtensions drin. Im Namespace Microsoft.VisualBasic existiert allerdings bereits
eine gleichnamige Methode und diese wird im Umgang mit SQL-Daten auch recht häufig gebraucht. Visual Studio kompiliert zwar brav den Code, aber es gibt anschließend
häßliche Fehlermeldungen, weil IsDBNull auf die Edge-Extensions aufgelöst wird und nicht mehr auf das MS-Namespace. Warum das auch immer so ist, es sei VB'lern angeraten diese
Methode in den Extension zu löschen oder umzubenennen und die Assembly neu zu erstellen!
Die Sache mit den Intellisense-Tooltips
Die vielen neuen Erweiterungsmethoden, die sich bieten, wenn man zum Beispiel die Intellisense-Liste eines Strings aufklappt, ist zwar toll, aber auch etwas unübersichtlich, denn
nicht immer kann man anhand des Namens einer Methode genau auf deren Funktionalität schließen.
Zu diesem Zweck hat Microsoft die XML-Kommentare eingeführt, die Nessland auch eifrig verwendet hat, aber zunächst war meine Ernüchterung groß, als die schicken
XML-Summaries nicht im Tooltip auftauchten, nachdem ich die DLL's in mein Projekt importiert hatte.
Dazu muss man wissen, dass die Kommentare nicht in die Assembly kompiliert werden, weil sie ja nur zur Dokumentation dienen. Um nun trotzdem in den Genuß der Erläuerungen zu
kommen, muss man die DLL's mit dem Schalter /doc und der Angabe einer XML-Datei kompilieren. Alternativ geht das auch über die VS-GUI (siehe Bild).
Damit werden die Kommentare in einer externen XML-Datei ausgegeben.
Diese XML-Dateien müssen den gleichen Namen wie die DLL's tragen, also zum Beispiel Edge.Extensions.dll und Edge.Extensions.xml und zusammen ins Projekt eingebunden,
also in den Ordner BIN kopiert, werden
Happy Coding... ;)