C# 3.0 – Extension Methods

Mit Erweiterungsmethoden (Extension Methods) können Sie vorhandenen Typen Methoden hinzufügen, ohne einen neuen abgeleiteten Typ zu erstellen und ohne den ursprünglichen Typ neu kompilieren oder auf andere Weise bearbeiten zu müssen. Erweiterungsmethoden sind eine besondere Art von statischen Methoden, die Sie jedoch wie Instanzmethoden für den erweiterten Typ aufrufen können. Für in C# und Visual Basic geschriebenen Clientcode gibt es keinen sichtbaren Unterschied zwischen dem Aufrufen einer Erweiterungsmethode und den Methoden, die in einem Typ tatsächlich definiert sind.

Hier der ursprünglich Typ Person:

   1:      public partial class Person
   2:      {
   3:          private string firstname;
   4:          public string Firstname
   5:          {
   6:              get { return firstname; }
   7:              set 
   8:              {
   9:                  //Partial Method
  10:                  OnBeforeFirstnameChange(value);
  11:   
  12:                  firstname = value;
  13:                  //Partial Method
  14:                  OnAfterFirstnameChange(firstname);
  15:              }
  16:          }
  17:   
  18:          partial void OnBeforeFirstnameChange(string name);
  19:          partial void OnAfterFirstnameChange(string name);
  20:      }

Im nächsten Schritt legen wir eine statische  Klasse für die Erweiterungen an und implementieren die statische Methode AdressLabel die als Erweiterungsmethode für den Typ Person dienen soll.

   1:      public static class PersonExtension
   2:      {
   3:          public static string AdressLabel(this Person p)
   4:          {
   5:              return p.Firstname;
   6:          }
   7:      }

Erweiterungsmethoden werden als statische Methoden definiert, jedoch mithilfe einer Instanzmethodensyntax aufgerufen. Der erste Parameter bestimmt, für welchen Typ die Methode gilt, und vor dem Parameter steht der this-Modifizierer. Erweiterungsmethoden befinden sich nur dann im Bereich, wenn Sie den Namespace explizit mit einer using-Direktive in Ihren Quellcode importieren.

Die Verwendung der Erweiterungsmethode ist denkbar einfach:

   1:              Person p = new Person();
   2:              string label = p.AdressLabel();