首頁 > 後端開發 > C++ > Ref 和 Out 修飾符可以在 C# 擴充方法中使用嗎?

Ref 和 Out 修飾符可以在 C# 擴充方法中使用嗎?

Mary-Kate Olsen
發布: 2025-01-07 16:46:41
原創
495 人瀏覽過

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

C# 擴充方法中的 ref 和 out 修飾符

在擴充引用型別的擴充方法中,第一個參數不能使用 refout 修飾符。然而,從 C# 7.2 開始,可以為擴展值類型(結構體)的擴展方法的第一個參數添加 ref 修飾符。

此限制的原因是擴展方法的第一個參數被視為接收器參數,它表示被擴展的實例。對於參考類型,接收器參數始終透過參考傳遞,因此使用 refout 修飾符是多餘的。

但是,對於值類型,接收器參數是按值傳遞的,這表示在擴充方法中對其進行的任何變更都不會反映在原始值類型實例中。透過使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板