ホームページ >バックエンド開発 >C++ >Ref 修飾子と Out 修飾子は C# 拡張メソッドで使用できますか?

Ref 修飾子と Out 修飾子は C# 拡張メソッドで使用できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-07 16:46:41471ブラウズ

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

C# 拡張メソッドの ref 修飾子と out 修飾子

参照型を拡張する拡張メソッドでは、最初のパラメーターで ref または out 修飾子を使用できません。ただし、C# 7.2 以降では、拡張値型 (構造体) の拡張メソッドの最初のパラメーターに ref 修飾子を追加できるようになりました。

この制限の理由は、拡張メソッドの最初のパラメーターが、拡張されるインスタンスを表す受信側パラメーターと見なされるためです。参照型の場合、受信側パラメーターは常に参照によって渡されるため、ref または out 修飾子の使用は冗長です。

ただし、値型の場合、受信側パラメーターは値によって渡されます。つまり、拡張メソッドで加えられた変更は、元の値型インスタンスには反映されません。 ref 修飾子を使用すると、値型のインスタンスを参照によって渡すことができ、拡張メソッドでその状態を変更できるようになります。

例:

<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>

この例では、ChangeMyValue 拡張メソッドは、ref 修飾子を使用して MyProperties 値型インスタンスの状態を変更できます。 out 修飾子は拡張メソッドの最初のパラメーターでは引き続き使用できないことに注意してください。

以上がRef 修飾子と Out 修飾子は C# 拡張メソッドで使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。