C# 擴充方法與 ref
參數:歷史視角
為什麼 C# 擴充方法在 7.2 版本之前不能在其第一個參數上使用 ref
關鍵字? 此限制源自於基本的設計選擇:
this
參數: 隱式 this
參數(擴展方法所操作的實例)被視為值類型,進一步強化了按值傳遞行為。 編譯器優化了它的傳遞,防止ref
修改。 C# 7.2 革命
C# 7.2 引入了重大變更:
ref
參數支援: 取消了第一個參數使用 ref
的限制。這允許透過引用傳遞值類型(結構),從而可以直接修改原始資料。 範例:在擴充方法中使用 ref
<code class="language-csharp">// Extension method with ref parameter public static void UpdateValue(this ref MyStruct myStruct, string newValue) { myStruct.Value = newValue; } // Usage MyStruct myStruct = new MyStruct { Value = "Old Value" }; myStruct.UpdateValue("New Value"); // Modifies the original myStruct</code>
主要優點和注意事項:
此改進增強了擴充方法的功能和靈活性,特別是在使用值類型時。 然而:
this
參數仍以數值傳遞: 隱式 this
參數繼續以數值傳遞。 C# 7.2 中的這項變更顯著改善了擴充方法的功能,使它們在操作值類型資料方面更加通用。
以上是為什麼在 C# 7.2 之前擴展方法不能在其第一個參數上使用'ref”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!