Heim >Backend-Entwicklung >C++ >Können Ref- und Out-Modifikatoren in C#-Erweiterungsmethoden verwendet werden?

Können Ref- und Out-Modifikatoren in C#-Erweiterungsmethoden verwendet werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-07 16:46:41503Durchsuche

Can Ref and Out Modifiers Be Used in C# Extension Methods?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn