Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird das Implementieren Ihrer eigenen Erweiterungsmethoden für jeden .NET-Typ behandelt. Clientcode kann Ihre Erweiterungsmethoden verwenden. Clientprojekte müssen auf die Assembly verweisen, in der sie enthalten sind. Clientprojekte müssen eine using-Direktive hinzufügen, die den Namespace angibt, in dem die Erweiterungsmethoden definiert sind.
Ab C# 14 gibt es zwei Syntaxen, mit denen Sie Erweiterungsmethoden definieren können. C# 14 fügt Erweiterungsblöcke hinzu, bei denen Sie Erweiterungsmember für einen Typ definieren. Vor C# 14 fügen Sie diesen Modifizierer dem ersten Parameter einer statischen Methode hinzu, um anzugeben, dass die Methode als Mitglied einer Instanz des Parametertyps angezeigt wird.
Erweiterungsblöcke (C# 14 und höher)
Ab C# 14 können Sie Erweiterungsmethoden mithilfe von Erweiterungsblöcken deklarieren. Ein Erweiterungsblock ist ein Block in einer nicht geschachtelten, nicht generischen statischen Klasse, die Erweiterungsmember für einen Typ oder eine Instanz dieses Typs enthält.
So definieren und aufrufen Sie eine Erweiterungsmethode mithilfe von Erweiterungsblöcken:
- Definieren Sie eine statische Klasse, die die Erweiterungsmethode enthalten soll. Die Klasse kann nicht in einem anderen Typ geschachtelt werden und muss für Clientcode sichtbar sein. Weitere Informationen zu den Barrierefreiheitsregeln finden Sie im Abschnitt Zugriffsmodifizierer.
- Verwenden Sie einen Erweiterungsblock , um Erweiterungsmember für einen Typ zu deklarieren.
- Fügen Sie im aufrufenden Code eine
using-Direktive hinzu, um den Namespace anzugeben, der die Erweiterungsklassemethode enthält. - Rufen Sie die Methoden als Instanzenmethoden für den Typ auf.
Im folgenden Beispiel wird eine Erweiterungsmethode WordCount unter Verwendung der C# 14-Erweiterungsblocksyntax implementiert. Die Methode wird für die String Klasse ausgeführt. Der CustomExtensions Namespace wird in den Anwendungsnamespace importiert, und die Methode wird aufgerufen, als wäre es eine Instanzmethode für die Zeichenfolge.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
extension(string str)
{
// This is the extension member.
// The `str` parameter is declared on the extension declaration.
public int WordCount()
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
}
Erweiterungsmethoden (frühere Versionen)
Vor C# 14 deklarieren Sie eine Erweiterungsmethode, indem Sie diesen Modifizierer zum ersten Parameter einer statischen Methode hinzufügen.
So definieren und aufrufen Sie eine Erweiterungsmethode mithilfe der klassischen Syntax:
- Definieren Sie eine statische Klasse, die die Erweiterungsmethode enthalten soll. Die Klasse kann nicht in einem anderen Typ geschachtelt werden und muss für Clientcode sichtbar sein. Weitere Informationen zu den Barrierefreiheitsregeln finden Sie im Abschnitt Zugriffsmodifizierer.
- Implementieren Sie die Erweiterungsmethode als statische Methode mit mindestens die gleichen Sichtbarkeit wie die enthaltende Klasse.
- Der erste Parameter der Methode gibt den Typ an, auf den die Methode angewendet wird. Ihm muss ein this-Modifizierer vorangehen.
- Fügen Sie im aufrufenden Code eine
using-Direktive hinzu, um den Namespace anzugeben, der die Erweiterungsklassemethode enthält. - Rufen Sie die Methoden als Instanzenmethoden für den Typ auf.
Im folgenden Beispiel wird eine Erweiterungsmethode implementiert, die mit der klassischen Syntax benannt wird WordCount . Die Methode wird auf der String Klasse ausgeführt, die als erster Methodenparameter mit dem this Modifizierer angegeben wird. Der CustomExtensions Namespace wird in den Anwendungsnamespace importiert, und die Methode wird aufgerufen, als wäre es eine Instanzmethode für die Zeichenfolge.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type to be extended.
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
Hinweis
Der erste Parameter wird nicht durch Aufrufen von Code angegeben, da er den Typ darstellt, auf den die Methode angewendet wird, und der Compiler kennt bereits den Typ des Objekts. Sie müssen nur Argumente für Parameter 2 bis n bereitstellen.
Allgemeine Informationen
Die Überladungsauflösung bevorzugt Instanz- oder statische Methoden, die vom Typ selbst definiert wurden, gegenüber Erweiterungsmethoden. Erweiterungsmethoden können in der erweiterten Klasse nicht auf private Daten zugreifen.