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中文網其他相關文章!