日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#之out和ref区别

發布時間:2023/11/29 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#之out和ref区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

out與ref的區別總結:
1.兩者都是通過引用來傳遞。
2.兩者都按地址傳遞的,使用后都將改變原來參數的數值。
3.屬性不是變量,因此不能作為 out或ref 參數傳遞。
4.若要使用 ref 或 out,方法定義和調用方法都必須顯式使用 out、ref 關鍵字。
5.rel可以把參數的數值傳遞進函數,但是out是要把參數清空,就是說你無法把一個數值從out傳遞進去的,out進去后,參數的數值為空,所以你必須初始化一次。或者說,rel是有進有出,out是只出不進
6.盡管 ref 和 out 在運行時的處理方式不同,但在編譯時的處理方式相同。
—6-1.因此,如果一個方法采用 ref 參數(例:Method(ref int i)),而另一個方法采用 out 參數(例:Method(out int i)),則無法重載這兩個方法,因為從編譯的角度來看,以上兩個方法是完全相同的,因此將不會編譯方法內的代碼
—6-2.但是,如果一個方法采用 ref 或 out 參數(例如:Method(ref/out int i))),而另一個方法不采用這兩個參數Method(int i)),則可以進行重載
7.實用場合:out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

代碼如下:

1 public static void Main(string[] args) 2 { 3 //使用out 4 Console.WriteLine("-----------------------------使用OUT的方法-----------------------------"); 5 Console.WriteLine("-----------------調用Out方法前參數沒賦值-----------------"); 6 string outName; 7 string outSchool; 8 int outGrad; 9 outMethod(out outName, out outGrad, out outSchool); 10 Console.WriteLine("學生" + outName + "是:" + outSchool + outGrad + "級學生"); 11 12 Console.WriteLine("-----------------調用Out方法前參數賦值了-----------------"); 13 string outNameValue = "李XX"; 14 string outSchoolValue = "河南大學"; 15 int outGradValue = 2011; 16 outMethod(out outNameValue, out outGradValue, out outSchoolValue); 17 Console.WriteLine("學生" + outNameValue + "是:" + outSchoolValue + outGradValue + "級學生"); 18 19 20 21 //使用ref: 22 Console.WriteLine("-----------------------------使用REF的方法-----------------------------"); 23 string refName = "李XX"; 24 string refSchool = "河南大學"; 25 int refGrad = 2011; 26 Console.WriteLine("-----------------refMethod方法里沒賦值-----------------"); 27 refMethod(ref refName, ref refGrad, ref refSchool); 28 Console.WriteLine("學生" + refName + "是:" + refSchool + refGrad + "級學生"); 29 Console.WriteLine("-----------------refMethod方法里賦值了-----------------"); 30 refMethodValue(ref refName, ref refGrad, ref refSchool); 31 Console.WriteLine("學生" + refName + "是:" + refSchool + refGrad + "級學生"); 32 33 Console.ReadLine(); 34 } 35 36 37 38 //outMethod 39 //out方法輸出參數特征: 40 //1.不在棧中為形參分配新的內存。 41 //2.形參的名稱相當于實參變量的別名,引用與實參相同的內存位置。 42 //3.既然形參和實參引用相同的內存位置,則在方法執行期間,形參所做的任何改變在方法完成之后通過實參變量都是可見的。 43 private static void outMethod(out string name, out int grad, out string school) 44 { 45 name = "王XX"; 46 grad = 2009; 47 school = "鄭州大學"; 48 } 49 50 //refMethod 51 //ref方法輸出參數特征: 52 //1.不在棧中為形參分配新的內存。 53 //2.形參的名稱相當于實參變量的別名,引用與實參相同的內存位置。 54 //3.既然形參和實參引用相同的內存位置,則在方法執行期間,形參所做的任何改變在方法完成之后通過實參變量都是可見的。 55 private static void refMethod(ref string name, ref int grad, ref string school) 56 { 57 58 } 59 private static void refMethodValue(ref string name, ref int grad, ref string school) 60 { 61 name = "王XX"; 62 grad = 2009; 63 school = "鄭州大學"; 64 }

?以上代碼的輸出結果:

由以上的輸出結果可以看出:

1、在調用方法outMethod之前變量賦值不賦值沒有任何意義,因為out是要把參數清空的,其參數賦值只要在方法內部進行就可以了;即out是只出不進

2、在調用refMethod之前必須給變量賦值,然而在refMethod方法內部參數賦值不賦值均可以,如方法內部重新賦值了則修改其值,如方法內部沒重新賦值則不修改其值;rel是有進有出,

轉載于:https://www.cnblogs.com/cocoon/p/4997010.html

總結

以上是生活随笔為你收集整理的C#之out和ref区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。