English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Erweiterungsmethode

Wie der Name schon sagt, sind Erweiterungsmethoden zusätzliche Methoden. Erweiterungsmethoden ermöglichen es Ihnen, andere Methoden hinzuzufügen, ohne die ursprüngliche Klasse, Struktur oder Schnittstelle zu ändern, zu Ableiten oder neu zu kompilieren. Erweiterungsmethoden können zu eigenen benutzerdefinierten Klassen, .NET Framework-Klassen oder Drittanbieter-Klassen oder -Schnittstellen hinzugefügt werden.

Definition der Erweiterungsmethoden

Erweiterungsmethoden sind C# 3Neue Funktionen in .0 hinzugefügt, die es ermöglichen, Funktionalitäten der Quelldatei ohne Änderung des Quellcode-Codes durch das Hinzufügen von Dateien zu erweitern.

Die Anforderungen an die Erweiterungsmethoden sind:

  • Erweiterungsmethoden müssen in einer mit static dekorierten Klasse enthalten sein.

  • Die Erweiterung muss statisch sein.

  • Der erste Parameter der Erweiterungsmethode beginnt mit this, was bedeutet, dass ein Objekt der zu erweiternden Klasse erforderlich ist, und ab dem zweiten Parameter beginnt die Parameterliste der Erweiterungsmethode.

Im folgenden Beispiel ist IsGreaterThan () eine Erweiterungsmethode für den Datentyp int, die true zurückgibt, wenn der Wert der int-Variablen größer als der angegebene Integer-Parameter ist.

int i = 10;
bool result = i.IsGreaterThan(100); //Rückgabe FALSE

Die Methode IsGreaterThan () ist keine Methode des Datentyps int (Int32 struct). Es ist eine Erweiterungsmethode, die von einem Programmierer für den Datentyp int geschrieben wurde. Durch das Enthalten eines Namensraums, der die Erweiterungsmethode IsGreaterThan () definiert, wird die Erweiterungsmethode IsGreaterThan () im gesamten Anwendungsbereich verfügbar.

 Erweiterungsmethoden haben in der Intellisense von Visual Studio spezielle Symbole, sodass Sie leicht zwischen Klassenmethoden und Erweiterungsmethoden unterscheiden können.

Erweiterungsmethodensymbole in der Intelligenzvorhersage von Visual Studio

Erstellen Sie Erweiterungsmethoden

Lassen Sie uns nun schauen, wie man Erweiterungsmethoden schreibt.

LINQ basiert auf Erweiterungsmethoden, die auf die Typen IEnumerable und IQueryable operieren.

Erweiterungsmethoden sind spezielle statische Methoden, die in einer statischen Klasse definiert werden. Um eine Erweiterungsmethode zu definieren, müssen Sie zunächst eine statische Klasse definieren.

Zum Beispiel, in folgendem Beispiel haben wir unter dem Namespace ExtensionMethods eine Klasse IntExtensions erstellt. Die Klasse IntExtensions enthält alle Erweiterungsmethoden für den Datentyp int. (Sie können für den Namespace und die Klasse jeden Namen verwenden.)

namespace ExtensionMethods
{
    public static class IntExtensions
    {
    }
}

现在,将静态方法定义为扩展方法,其中扩展方法的第一个参数指定了适用扩展方法的类型。我们将在int类型上使用此扩展方法。因此,必须在第一个参数 int 之前加上this 修饰符。

例如,IsGreaterThan()方法对int进行操作,因此第一个参数为this int i。

namespace ExtensionMethods
{
    public static class IntExtensions
     {
        public static bool IsGreaterThan(this int i, int value)
        {
            return i > value;
        }
    }
}

现在,您可以将 ExtensionMethods 命名空间包含在任何希望使用此扩展方法的地方。

使用扩展方法

using ExtensionMethods;
class Program
{
    static void Main(string[] args)
    {
        int i = 10;
        bool result = i.IsGreaterThan(100); 
        Console.WriteLine(result);
    }
}
输出:
false
常规静态方法和扩展方法之间的唯一区别是,扩展方法的第一个参数指定其将要对运算符进行操作的类型,其后跟 this Schlüsselwort.

扩展方法的原则总结

  1. C#仅支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。

  2. 扩展方法(位于this之前的第一个参数的方法)必须在非泛型的静态类中声明,扩展方法必须有一个参数,而且只有第一个参数使用this标记。

  3. C#编译器在查找静态类中的扩展方法时,要求这些静态类本身必须具有文件作用域。

  4. C#编译器要求“导入”扩展方法。(静态方法可以任意命名,C#编译器在寻找方法时,需要花费时间进行查找,需要检查文件作用域中的所有静态类,并扫描它们的所有静态方法来查找一个匹配)

  5. 多个静态类可以定义相同的扩展方法。
    扩展一个类型时,同时也会扩展其派生类型。

扩展方法声明

  • 必须在非嵌套的、非泛型的静态类中(因此必须是一个静态方法)

  • Es muss mindestens ein Parameter vorhanden sein.

  • Der erste Parameter muss mit dem this-Schlüsselwort als Präfix versehen werden.

  • Der erste Parameter darf keine anderen Modifikatoren haben (wie ref oder out).

  • Der Typ des ersten Parameters darf kein Zeiger-Typ sein.

Zu beachtende Punkte

  • Erweiterungsmethoden sind andere benutzerdefinierte Methoden, die ursprünglich nicht in der Klasse enthalten sind.

  • Erweiterungsmethoden können zu benutzerdefinierten, .NET Framework oder Drittanbieter-Klassen, Strukturen oder Schnittstellen hinzugefügt werden.

  • Der erste Parameter der Erweiterungsmethode muss der Typ sein, auf den die Erweiterungsmethode angewendet wird, gefolgt vonthisSchlüsselwort.

  • Durch den Namensraum, der Erweiterungsmethoden enthält, können Erweiterungsmethoden an jedem Ort in der Anwendung verwendet werden.