理解C# 中引用類型變數的「ref」的使用
雖然很明顯「ref」關鍵字允許我們透過值傳遞對值類型變數的引用,其對於引用類型的重要性可能不太明顯。本文探討了「ref」與引用型別變數的具體用例。
考慮以下類別:
public class Foo { public string Name; public Foo(string name) { Name = name; } }
按值傳遞引用類型變數與按值傳遞引用類型變數引用:
沒有“ref”關鍵字,將引用類型變數(例如“x”)傳遞給方法仍然傳遞引用,而不是副本。這意味著該方法對原始物件進行操作。例如:
var x = new Foo("1"); void Bar(Foo y) { y.Name = "2"; } Bar(x); // changes the Name property of the original object
使用「ref」來變更引用型別變數的參考:
但是,引用型別的「ref」關鍵字變數有特定的用途:它允許我們更改方法內變數的參考。例如:
Foo foo = new Foo("1"); void Bar(ref Foo y) { y = new Foo("2"); // creates a new object and assigns it to y } Bar(ref foo); // changes the reference of 'foo' to point to the new object
在這種情況下,調用“Bar(ref foo)”後,“foo”將不再引用原始對象,而是引用新創建的對象,其名稱屬性為“ 2” ".
實際應用:
此功能在我們想要返回新的場景中非常有用方法中的對象,而無需顯式地將引用作為輸出參數傳遞回來 例 例。如,我們可以建立一個方法,尋找並傳回清單中滿足特定條件的第一個元素:
public static T FindFirst<T>(List<T> list, Func<T, bool> predicate) where T : class { foreach (T item in list) { if (predicate(item)) return item; } return null; }
在此方法中使用「ref」關鍵字可以讓我們避免建立一個out參數,同時仍能夠傳回找到的物件。
以上是何時以及為何在 C# 中將「ref」與引用類型變數一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!