Heim >Backend-Entwicklung >C++ >Können Ref- und Out-Modifikatoren in C#-Erweiterungsmethoden verwendet werden?
ref- und out-Modifizierer in C#-Erweiterungsmethoden
In einer Erweiterungsmethode, die einen Referenztyp erweitert, kann der erste Parameter nicht den Modifikator ref
oder out
verwenden. Ab C# 7.2 ist es jedoch möglich, den Modifikator ref
zum ersten Parameter einer Erweiterungsmethode eines erweiterten Werttyps (Struktur) hinzuzufügen.
Der Grund für diese Einschränkung besteht darin, dass der erste Parameter einer Erweiterungsmethode als Empfängerparameter betrachtet wird, der die zu erweiternde Instanz darstellt. Bei Referenztypen wird der Empfängerparameter immer als Referenz übergeben, sodass die Verwendung des Modifizierers ref
oder out
überflüssig ist.
Bei Werttypen wird der Empfängerparameter jedoch als Wert übergeben, was bedeutet, dass alle in der Erweiterungsmethode daran vorgenommenen Änderungen nicht in der ursprünglichen Werttypinstanz widergespiegelt werden. Mithilfe des Modifikators ref
können Sie eine Werttypinstanz als Referenz übergeben und so ihren Status in einer Erweiterungsmethode ändern.
Beispiel:
<code class="language-csharp">public struct MyProperties { public string MyValue { get; set; } } public static class MyExtensions { public static void ChangeMyValue(this ref MyProperties myProperties) { myProperties.MyValue = "hello from MyExtensions"; } } public class MyClass { public MyClass() { MyProperties myProperties = new MyProperties(); myProperties.MyValue = "hello world"; myProperties.ChangeMyValue(); // Now modifies the original myProperties instance } }</code>
In diesem Beispiel kann die ChangeMyValue
-Erweiterungsmethode den Status der ref
-Werttypinstanz mithilfe des MyProperties
-Modifikators ändern. Beachten Sie, dass der Modifikator out
immer noch nicht für den ersten Parameter einer Erweiterungsmethode verwendet werden kann.
Das obige ist der detaillierte Inhalt vonKönnen Ref- und Out-Modifikatoren in C#-Erweiterungsmethoden verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!