Erweiterungsmethode mit ref
Modifikator
In Erweiterungsmethoden ist es verboten, den Modifikator this
für den ersten Parameter (normalerweise als ref
-Parameter bezeichnet) zu verwenden. Die Hauptgründe sind wie folgt:
Inkompatibel mit den Designprinzipien der C#-Sprache:
Erweiterungsmethoden sollen eine Möglichkeit zur Vererbung bieten, ohne den ursprünglichen Typ zu ändern. Das Zulassen von ref
für das erste Argument würde gegen dieses Prinzip verstoßen, da es eine direkte Änderung der ursprünglichen Instanz ermöglichen würde.
Mögliche Probleme mit der Typensicherheit:
Das Übergeben eines Werttyps (Struktur) als Referenz über den ersten Parameter kann es einer Erweiterungsmethode ermöglichen, die ursprüngliche Instanz zu ändern, selbst wenn die Methode in einer statischen Klasse deklariert ist. Dies kann zu Inkonsistenzen und unerwartetem Verhalten führen.
Allerdings in C# 7.2 und höher:
Die C#-Sprachspezifikation wurde aktualisiert, um die Verwendung von ref
für das erste Argument von Erweiterungsmethoden zu ermöglichen. Diese Funktionalität ist auf Werttypen (Strukturen) beschränkt und ermöglicht die Änderung der ursprünglichen Instanz. Es ist zu beachten, dass diese Funktion nicht mit Referenztypen (Klassen, Schnittstellen, Datensätze) funktioniert.
Beispiel:
Das folgende Beispiel veranschaulicht die Verwendung von ref
innerhalb einer Erweiterungsmethode:
public struct MyProperties { public string MyValue { get; set; } } public static class MyExtensions { public static void ChangeMyValue(this ref MyProperties myProperties) { myProperties.MyValue = "来自MyExtensions的问候"; } } public class MyClass { public MyClass() { MyProperties myProperties = new MyProperties(); myProperties.MyValue = "你好,世界"; myProperties.ChangeMyValue(); //调用扩展方法修改值 } }
In diesem Beispiel ändert die ChangeMyValue
-Erweiterungsmethode die MyProperties
-Eigenschaft der ursprünglichen MyValue
-Instanz, bei der es sich um einen Werttyp handelt. Durch die Verwendung von ref
kann die Methode direkt auf die Instanz zugreifen und so deren Zustand ändern.
Das obige ist der detaillierte Inhalt vonKönnen Erweiterungsmethoden den Modifikator „ref' für ihren ersten Parameter verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!