詳解C#使用ref和out
在C#中,既可以通過值也可以通過引用傳遞參數。通過引用傳遞參數允許函數成員(方法、屬性、索引器、運算符和構造函數)更改參數的值,并保持該更改。若要通過引用傳遞參數,請C#使用ref和out傳遞數組。為簡單起見,本主題的示例中只使用了ref關鍵字。有關ref和out傳遞數組之間的差異的信息,請參見、C#使用ref和out傳遞數組。
本主題包括下列章節:
◆傳遞值類型參數
◆傳遞引用類型參數
值類型變量直接包含其數據,這與引用類型變量不同,后者包含對其數據的引用。因此,向方法傳遞值類型變量意味著向方法傳遞變量的一個副本。方法內發生的對參數的更改對該變量中存儲的原始數據無任何影響。如果希望所調用的方法更改參數值,必須使用ref或out關鍵字通過引用傳遞該參數。為了簡單起見,以下示例使用ref。
下面的示例演示通過值傳遞值類型參數。通過值將變量myInt傳遞給方法SquareIt。方法內發生的任何更改對變量的原始值無任何影響。
- //PassingParams1.cs
- usingSystem;
- classPassingValByVal
- ...{
- staticvoidSquareIt(intx)
- //Theparameterxispassedbyvalue.
- //ChangestoxwillnotaffecttheoriginalvalueofmyInt.
- ...{
- x*=x;
- Console.WriteLine("Thevalueinsidethemethod:{0}",x);
- }
- publicstaticvoidMain()
- ...{
- intmyInt=5;
- Console.WriteLine("Thevaluebeforecallingthemethod:{0}",
- myInt);
- SquareIt(myInt);//PassingmyIntbyvalue.
- Console.WriteLine("Thevalueaftercallingthemethod:{0}",
- myInt);
- }
- }
當調用SquareIt時,myInt的內容被復制到參數x中,在方法內將該參數求平方。但在Main中,myInt的值在調用SquareIt方法之前和之后是相同的。實際上,方法內發生的更改只影響局部變量x。
下面的示例除使用ref關鍵字傳遞參數以外,其余與上面代碼相同。參數的值在調用方法后發生更改。
- //PassingParams2.cs
- usingSystem;
- classPassingValByRef
- ...{
- staticvoidSquareIt(refintx)
- //Theparameterxispassedbyreference.
- //ChangestoxwillaffecttheoriginalvalueofmyInt.
- ...{
- x*=x;
- Console.WriteLine("Thevalueinsidethemethod:{0}",x);
- }
- publicstaticvoidMain()
- ...{
- intmyInt=5;
- Console.WriteLine("Thevaluebeforecallingthemethod:{0}",
- myInt);
- SquareIt(refmyInt);//PassingmyIntbyreference.
- Console.WriteLine("Thevalueaftercallingthemethod:{0}",
- myInt);
- }
- }
以上介紹C#使用ref和out傳遞數組
【編輯推薦】



















