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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ref 和out 关键字

發(fā)布時(shí)間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ref 和out 关键字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  

  ref 和out 關(guān)鍵字

  

  通過對(duì)CLR的學(xué)習(xí),我們可以知道,CLR默認(rèn)所有方法參數(shù)都是傳值的。對(duì)于引用類型的對(duì)象,傳遞的是對(duì)象的引用(指向?qū)ο蟮闹羔?#xff09;,被調(diào)用者擁有該對(duì)象的引用的拷貝,能夠修改對(duì)象,改變對(duì)象的值;而對(duì)于值類型的實(shí)例來說,傳遞給的是實(shí)例的一個(gè)副本,被調(diào)用者對(duì)該副本所做的修改不會(huì)影響調(diào)用者中的實(shí)例。

  上面使用的是按傳值方式來傳遞參數(shù)。接下來,講按傳引用的方式來傳遞參數(shù)。

  C# 中提供了 ref 和 out 關(guān)鍵字以便參數(shù)按引用(地址)傳遞,對(duì)值類型使用ref和out,為被調(diào)用者分配一個(gè)托管指針,該指針指向調(diào)用者的變量;對(duì)于引用類型的話,為被調(diào)用者分配一個(gè)托管指針,該指針指向調(diào)用者中的對(duì)象。

  

  補(bǔ)充一下代碼,希望能夠更加清晰點(diǎn):

  

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace MyExamples.App 8 { 9 class Book { 10 11 public String Name; 12 13 /// <summary> 14 /// 按傳值方式傳遞 15 /// </summary> 16 /// <param name="book"></param> 17 /// <param name="count"></param> 18 public void GetInfo(Book book, int count) 19 { 20 book.Name = "Eric"; 21 count = 15; 22 } 23 24 /// <summary> 25 /// 使用ref關(guān)鍵字按傳引用傳遞 26 /// </summary> 27 /// <param name="book"></param> 28 /// <param name="count"></param> 29 public void GetResultInfo(ref Book book, ref int count) { 30 book = new Book() 31 { 32 Name = "jerry" 33 }; 34 count = 10; 35 } 36 37 /// <summary> 38 /// 輸出結(jié)果 39 /// </summary> 40 /// <param name="book"></param> 41 /// <param name="count"></param> 42 public void GetResult(Book book, int count) 43 { 44 Console.WriteLine("book's Name is {0},Count is {1}", book.Name, count); 45 } 46 47 } 48 49 class Program 50 { 51 static void Main(string[] args) 52 { 53 Book book = new Book() 54 { 55 Name = "jonish" 56 }; 57 58 int Count = 5; 59 60 book.GetInfo(book, Count); 61 book.GetResult(book, Count); 62 63 book.GetResultInfo(ref book, ref Count); 64 book.GetResult(book, Count); 65 } 66 } 67 } View Code

  

  運(yùn)行結(jié)果:

  

------------------------------------------------------------------------------------------------------------------------------------------------------

ref 和 out相同點(diǎn):

1.使參數(shù)按引用傳遞,注意這里的“引用”與我們通常說的“對(duì)象引用”不一樣,可以形象的理解為,類似于C/C++中傳指針(地址)。

2.效果是,被調(diào)用方對(duì)該參數(shù)的修改會(huì)反映到該變量中,即當(dāng)調(diào)用結(jié)束返回時(shí),調(diào)用方看到的是修改過的值。

3.方法定義和調(diào)用方法都必須顯式使用 ref?或者 out?關(guān)鍵字

ref 和 out不同點(diǎn):

1。傳遞到 ref 的參數(shù)必須最先初始化,即由調(diào)用方顯式初始化。

2。傳遞到 out 的參數(shù)在傳遞之前不需要顯式初始化,但需要調(diào)用方在方法返回之前必須對(duì)其賦值。

?

方法重載時(shí)需要注意的地方:

1。ref 和 out 關(guān)鍵字在運(yùn)行時(shí)的處理方式不同,但在編譯時(shí)的處理方式相同。因此,如果一個(gè)方法采用 ref 參數(shù),而另一個(gè)方法采用 out 參數(shù),則無(wú)法重載這兩個(gè)方法。

2。但是,如果一個(gè)方法采用 ref 或 out 參數(shù),而另一個(gè)方法不采用這兩類參數(shù),則可以進(jìn)行重載。

?

相關(guān)MSDN學(xué)習(xí)資料:

http://msdn.microsoft.com/zh-cn/library/14akc2c7(v=vs.80).aspx

http://msdn.microsoft.com/zh-cn/library/t3c3bfhx(v=vs.80).aspx

?

轉(zhuǎn)載于:https://www.cnblogs.com/Jonish/p/2317562.html

總結(jié)

以上是生活随笔為你收集整理的ref 和out 关键字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。