Erweiterungsmethoden sind statische Methoden mit einer speziellen Syntax für den ersten Parameter. Der Compiler ermöglicht es, sie syntaktisch wie Instanzmethoden zu verwenden.
public class ExampleClass
{
public String Value { get; set; }
}
Nun könnte man ein Verfahren PrintValue()
durch Modifizieren der Klasse einzuführen.
public class ExampleClass
{
public String Value { get; set; }
public void PrintValueInstance()
{
Console.WriteLine(this.Value);
}
}
könnten Sie auch eine statische Methode in irgendeiner Klasse erstellen - ExampleClass
oder andere.
public class AnyClass
{
public static void PrintValueStatic(ExampleClass exampleClass)
{
Console.WriteLine(exampleClass.Value);
}
}
Und Sie können eine Erweiterungsmethode erstellen - es ist ähnlich wie die statische Methode, sondern markiert den ersten Parameter mit this
.
public class ExtensionClass
{
public static void PrintValueExtension(this ExampleClass exampleClass)
{
Console.WriteLine(exampleClass.Value);
}
}
Die ussage ist dann wie folgt.
So ermöglicht der Compiler die Verwendung einer statischen Methode mit Instanzmethoden-Syntax für Objekte, die dem Typ des ersten Parameters entsprechen. Auf diese Weise können Sie Methoden zu einer Klasse hinzufügen, ohne die Klasse ändern zu müssen. Natürlich gibt es eine Einschränkung - Sie können nur innerhalb einer Erweiterungsmethode auf öffentliche Mitglieder zugreifen.
Sie können auch Erweiterungsmethoden für Schnittstellen definieren, die dann allen Klassen zur Verfügung stehen, die die Schnittstelle implementieren.
public interface ISomeInterface
{
Int32 Foo(Int32 value);
Int32 Bar(String text);
}
public static class SomeInterfaceExtension
{
public static Int32 FooFooBar(this ISomeInterface @this, String text)
{
return @this.Foo(@this.Foo(@this.Bar(text));
}
}
Nun wird das Verfahren FooFooBar()
ist auf allen Klassen availiable ISomeInterface
implementieren.
public class NiceClass : ISomeInterface
{
public Int32 Foo(Int32 value)
{
return value * value;
}
public Int32 Bar(String text)
{
return text.Length;
}
}
Jetzt können Sie die Erweiterungsmethode auf NiceClass
Instanz verwenden.
NiceClass niceClass = new NiceClass();
Console.WriteLine(niceClass.FooFooBar("ExtensionMethodExample"));
Neben den doppelten Links finden Sie auch http://msdn.microsoft.com/en-us/library/bb383977.aspx (der MSDN-Artikel). – Noldorin
Ich suche zuerst nach 10 Minuten, fand aber keine befriedigende Antwort. Wie ich diesen Beitrag verpasst habe: http://StackOverflow.com/Questions/403539/What-are-Extension-Methods ... Ich weiß es nicht. Das ist eine stellare Antwort, genau das, wonach ich gesucht habe. Schließen wir diesen Beitrag. – Kjensen
Kein Problem ... Ich bin froh, dass Sie eine nützliche Antwort gefunden haben. – Noldorin