.NET

Tolle Extension-Methods und die Sache mit dem Summary-Tooltip

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... ;)

kick it on dotnet-kicks.de AddThis Trackback-Url...

Keine Kommentare bislang...

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 291

  • Datum: 05.08.2009
    Kategorie: .NET
    Zugriffe: 3.657
    Kommentare: 0
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei