(搜集整理的)C#中ref和out用法_第1頁
(搜集整理的)C#中ref和out用法_第2頁
(搜集整理的)C#中ref和out用法_第3頁
(搜集整理的)C#中ref和out用法_第4頁
(搜集整理的)C#中ref和out用法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、outout 關(guān)鍵字會(huì)導(dǎo)致參數(shù)通過引用來傳遞。 這與 ref 關(guān)鍵字類似, 不同之處在于 ref 要求變 量必須在傳遞之前進(jìn)行初始化。 若要使用 out 參數(shù), 方法定義和調(diào)用方法都必須顯式使用 out 關(guān)鍵字。 例如:class OutExamplestaticvoid Method( out int i)10 / 8i = 44;staticvoid Main()value;out value);intMethod(/ value is now 44盡管作為 out 參數(shù)傳遞的變量不必在傳遞之前進(jìn)行初始化,但被調(diào)用的方法需要在返回之 前賦一個(gè)值。盡管 ref 和 out 關(guān)鍵字會(huì)導(dǎo)致不同的

2、運(yùn)行時(shí)行為, 的一部分。 因此,如果兩個(gè)方法唯一的區(qū)別是:一個(gè)接受 數(shù),則無法重載這兩個(gè)方法。 例如,不會(huì)編譯下面的代碼:但在編譯時(shí)并不會(huì)將它們視為方法簽名ref 參數(shù),另一個(gè)接受 out 參 個(gè)人收集整理 勿做商業(yè)用途class CS0663_Example/ Compiler error CS0663: "Cannot define overloaded個(gè)人收集整理 勿做商業(yè)用/ methods that differ only on ref and out". public void SampleMethod( out int public void SampleMe

3、thod( ref inti) i) 但是,如果一個(gè)方法采用 ref 或 out 參數(shù), 重載,如下所示: 個(gè)人收集整理 勿做商業(yè)用途而另一個(gè)方法不采用這兩類參數(shù),則可以進(jìn)行class OutOverloadExamplepublic void SampleMethod( int i) out int i) i = 5; Public void SampleMethod( 屬性不是變量,因此不能作為out參數(shù)傳遞。有關(guān)傳遞數(shù)組的信息,請(qǐng)參見做商業(yè)用途使用ref和out傳遞數(shù)組(C#編程指南)。個(gè)人收集整理勿示例out方法很有用。下面的示例使用 out在一次方法調(diào)用Null。這樣使方法可以有選擇

4、地返回當(dāng)希望方法返回多個(gè)值時(shí),聲明中返回三個(gè)變量。請(qǐng)注意,第三個(gè)參數(shù)所賦的值為值。個(gè)人收集整理勿做商業(yè)用途class OutRetur nExa mple整理static勿做商業(yè)用途void Method( out int i, out strings1, out string s2)個(gè)人收集i = 44;s1 ="I've bee n retur ned"s2 =nullstaticvoid Mai n()intvalue;stri ngstr1, str2;Method(out value, out str1, out st;/ value is now 44

5、/ str1 is now "I've bee n returned"/ str2 is (still) n ull;C#語言規(guī)范有關(guān)更多信息,請(qǐng)參見 C# Language Specification 。C#語言規(guī)范是 C#語法和用法的權(quán) 威資料。個(gè)人收集整理勿做商業(yè)用途IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII個(gè)人收集整理勿做商業(yè)用途ref (C# 參考)Visual Studio 2010ref關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在

6、方法中對(duì)參數(shù)的任何更改 都將反映在該變量中。個(gè)人收集整理勿做商業(yè)用途說明不要將通過引用傳遞”概念與引用類型”概念相混淆。這兩個(gè)概念不相關(guān);方法參數(shù)無論是值類型還 是引用類型,都可通過 ref進(jìn)行修飾。 因此,通過引用傳遞值類型時(shí)沒有值類型裝箱。若要使用ref參數(shù),則方法定義和調(diào)用方法都必須顯式使用ref關(guān)鍵字。 例如:class RefExample staticvoid Method( ref int i)i = 44;staticvoid Main()int Method(val = 0; ref val);/ val is now 44傳遞到ref參數(shù)的參數(shù)必須最先初始化。這與out不同

7、,后者的參數(shù)在傳遞之前不需要顯式初始化。有關(guān)更多信息,請(qǐng)參見 out O個(gè)人收集整理勿做商業(yè)用途盡管ref和out關(guān)鍵字會(huì)導(dǎo)致不同的運(yùn)行時(shí)行為, 因此,如果兩個(gè)方法唯一的區(qū)別是:一個(gè)接受 ref 方法。 例如,不會(huì)編譯下面的代碼: 個(gè)人收集整理但在編譯時(shí)并不會(huì)將它們視為方法簽名的一部分。 參數(shù),另一個(gè)接受 out參數(shù),則無法重載這兩個(gè) 勿做商業(yè)用途class CS0663_Exampie個(gè)人收集整理/ Comp iler error CS0663: "Ca nnot define overloaded勿做商業(yè)用途/ methods that differ only on ref an

8、d out".out int i) ref int i) P ublicvoidp ublicvoidSamp leMethod(Samp leMethod(ref或out參數(shù),但是,如果一個(gè)方法采用下例所示:個(gè)人收集整理勿做商業(yè)用途而另一個(gè)方法不采用這兩個(gè)參數(shù),則可以進(jìn)行重載,如class RefOverloadExamplepublic void SampleMethod( public void SampleMethod(intrefi) int i) 屬性不是變量。它們實(shí)際上是方法,因此不能作為ref參數(shù)進(jìn)行傳遞。有關(guān)如何傳遞數(shù)組的信息,請(qǐng)參見 使用ref和out傳遞數(shù)組(C

9、#編程指南)。個(gè)人收集整理勿做商 業(yè)用途示例按引用傳遞值類型(如本主題前面所示)是有用的,但是ref對(duì)于傳遞引用類型也是很有用的。這允許被調(diào)用的方法修改該引用所引用的對(duì)象,因?yàn)橐帽旧硎前匆脕韨鬟f的。下面的示例顯示岀當(dāng)引用類型作為ref參數(shù)傳遞時(shí),可以更改對(duì)象本身。 有關(guān)更多信息,請(qǐng)參見傳遞引用類型參數(shù)(C# 編程指南)。個(gè)人收集整理勿做商業(yè)用途staticclass RefExa mple2 void Method( ref string s)"changed"staticvoid Main()stri ng str ="origi nal"Meth

10、od( ref str); Co nsole.WriteLi ne(str);/ Output: cha ngedC#語言規(guī)范llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll個(gè)人收集整理勿做商業(yè)用途使用ref和out傳遞數(shù)組(C#編程指南)Visual Studio 2010首選項(xiàng)”然后選此內(nèi)容為質(zhì)量更高的人工翻譯。若想同時(shí)查看此頁面和原始英文頁面的內(nèi)容,請(qǐng)單擊 擇 經(jīng)典視圖”作為您的查看首選項(xiàng)。 個(gè)人收集整理 勿做商業(yè)用途與所有的out參數(shù)一樣,在使用數(shù)組類型的out參數(shù)前必須先為其賦值,即必

11、須由被調(diào)用方為其賦 值。例如:個(gè)人收集整理勿做商業(yè)用途staticarr =void TestMethod1(new int 10;out int arr)/ defi nite assig nment of arr與所有的值??梢詫?shù)組類型的ref參數(shù)更改為調(diào)用的結(jié)果。 化為另一個(gè)數(shù)組。例如:個(gè)人收集整理勿做商業(yè)用途ref參數(shù)一樣,數(shù)組類型的ref參數(shù)必須由調(diào)用方明確賦值。因此不需要由接受方明確賦例如,可以為數(shù)組賦以null值,或?qū)⑵涑跏約tatic void TestMethod2( ref int arr) arr = new int 10;個(gè)人收集整理勿做商業(yè)用途/ arr in it

12、ialized to a differe nt arrayF面的兩個(gè)示例說明 out與ref在將數(shù)組傳遞給方法時(shí)的用法差異。示例在此例中,在調(diào)用方(Main方法)中聲明數(shù)組theArray,并在FillArray方法中初始化此數(shù)組。然后將數(shù)組元素返回調(diào)用方并顯示。個(gè)人收集整理 勿做商業(yè)用途class TestOutstatic void FillArray(out int arr)/I nitialize the array:arr =staticvoid Main()int theArray; / Initialization is not required/ Pass the array

13、to the callee using out: FillArray( out theArray);/ Display the array elements:System.Console.WriteLine( "Array elements are:"for ( int i = 0; i < theArray.Length; i+)System.Console.Write(theArrayi +" " ););/ Keep the console window open in debug mode. System.Console.WriteLine

14、(整理 勿做商業(yè)用途"Press any key to exit."); 個(gè)人收集System.Console.ReadKey();/* Output:Array elements are:1 2 3 4 5*/在此例中,在調(diào)用方( Main 方法)中初始化數(shù)組 方法。 在 FillArray 方法中更新某些數(shù)組元素。 做商業(yè)用途theArray ,并通過使用 ref 參數(shù)將其傳遞給 FillArray 然后將數(shù)組元素返回調(diào)用方并顯示。 個(gè)人收集整理 勿new int 5 1, 2, 3, 4, 5 ;class TestRefstatic void FillArray(

15、ref int arr) / Create the array on demand: if (arr = null )arr =new int 10;/ Fill the array: arr0 = 1111;arr4 = 5555; static void Main() / Initialize the array: int theArray = 1, 2, 3, 4, 5 ;/ Pass the array using ref: FillArray( ref theArray);/ Display the updated array:System.Console.WriteLine("Array elements are:"for ( int i = 0; i < theArray.Length; i+)System.Console.Writ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論