.
Anmeldung | Registrieren | Hilfe | Posteingang
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

C# 3.0 Extension Methods

Als erste Neuerung möchte ich die Extension Methods vorstellen. Mit C# 3.0 wurde die Möglichkeit geschaffen vorhandene Typen zu erweitern, ohne eine abgeleitete Klasse zu implementieren oder den ursprünglichen Typ erneut kompilieren zu müssen.

 

Die Sinnigkeit von Extension Methods möchte ich nun an 2 kleinen Beispielen erläutern, sicherlich hat ein jeder C# Programmierer das folgende Szenario erlebt:

Gegeben ist ein String mit dem Wert "1", um den String nun in ein Integer zu konvertieren konnte man auf Hilfsklassen wie Convert zurückgreifen oder auch die Methode int.Parse(); verwenden, es wäre jedoch wünschenswert wenn man einfach auf der Klasse String die Methode ToInt() hätte. Genau hier greifen die neuen Extension Methods. Nachfolgend findet ihr ein Codesnippet welches den .Net Framework Typ String um die Methoden bool CanConvertToInt32() und int ToInt32()

   1: using System;
   2:  
   3: namespace Extensions{
   4:  
   5:     public static class StringExtensions{
   6:     
   7:        public static bool CanConvertToInt32(this String instance)
   8:        {
   9:             int convertedString = -1;
  10:             return Int32.TryParse(instance, out convertedString);
  11:        }
  12:  
  13:        public static int ToInt32(this String instance)
  14:        {
  15:             int convertedString = -1;
  16:             if(Int32.TryParse(instance, out convertedString))
  17:                 return convertedString;
  18:             else
  19:                 throw new ArgumentException("This string instance
				 can not be converted to Int32");
  20:        }
  21:     }
  22:  
  23: }

CodeSnippet #1: Extending String

 

Nachdem dieser Code kompiliert ist erstelle ich nun einfach eine Test-Klasse, hierbei ist zu beachten dass der Namespace Extensions (im obigen Snippet definiert) eingebunden wird

   1: using Extesions;

CodeSnippet #2: Namespace einbinden.

 

Nachdem dies getan ist, erstellen wir einfach einen String und initialisieren diesen mit "1". Wenn wir nun auf den Instanznamen der Variable zugreifen und dessen Methoden und Members mit Hilfe des '.'-Operators abrufen sind die von uns erweiterten Methoden im IntelliSense zu sehen.

 

image
Abbildung #1: IntelliSense für System.String

 

Damit haben wir die Klasse System.String um 2 Methoden erweitert, natürlich macht eine Erweiterung von Klassen nur Sinn, wenn die Erweiterungsmethoden mehrmals benötigt werden. :D

 

Anmerkung meinerseits: System.String ist ja bekanntlich ein kleiner Sonderfall, im .Net Framework spiegelt die Klasse "string" das gleiche wie "System.String" zurück, auch die hier angelegten Extesions sind unter dem Typ string verfügbar.

von ThorstenHans, 15.07.2008 zugeordnet zu C# , Sprachenspezifisch .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 4601
  • Zur Druckversion
  • Artikel von ThorstenHans

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum