C#中out和ref的區(qū)別是什么-創(chuàng)新互聯(lián)

小編給大家分享一下C#中out和ref的區(qū)別是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、高唐網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

在學(xué)習(xí)C#時,總會遇到一些語言命令之類的用法相近卻不盡相同,今天討論的是C#中的out和ref的區(qū)別,首先討論是各自的用法,下文我會給大家總結(jié)out和ref之間的區(qū)別。apache php mysql

兩者都是按地址傳遞的,使用后都將改變原來參數(shù)的數(shù)值。

ref可以把參數(shù)的數(shù)值傳遞進函數(shù),但是out是要把參數(shù)清空,就是說你無法把一個數(shù)值從out傳遞進去的,out進去后,參數(shù)的數(shù)值為空,所以你必須初始化一次。這個就是兩個的區(qū)別,或者說就像有的網(wǎng)友說的,ref是有進有出,out是只出不進。

ref(C# 參考)

ref 關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時,在方法中對參數(shù)的任何更改都將反映在該變量中。若要使用 ref 參數(shù),則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字。

例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class RefExample

{

   static void Method(ref int i)

   {

       i = 44;

   }

   static void Main()

   {

       int val = 0;

       Method(ref val);

       // val is now 44

   }

}

傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。這與 out 不同,后者的參數(shù)在傳遞之前不需要顯式初始化。

盡管 ref 和 out 在運行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法采用 ref 參數(shù),而另一個方法采用 out 參數(shù),則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個方法是完全相同的,因此將不會編譯以下代碼:

1

2

3

4

5

6

7

class CS0663_Example

{

   // Compiler error CS0663: "cannot define overloaded

   // methods that differ only on ref and out".

   public void SampleMethod(ref int i) { }

   public void SampleMethod(out int i) { }

}

但是,如果一個方法采用 ref 或 out 參數(shù),而另一個方法不采用這兩個參數(shù),則可以進行重載,如下例所示:

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(ref int i) { }

}

out(C# 參考)

out 關(guān)鍵字會導(dǎo)致參數(shù)通過引用來傳遞。這與 ref 關(guān)鍵字類似,不同之處在于 ref 要求變量必須在傳遞之前進行初始化。若要使用 out 參數(shù),方法定義和調(diào)用方法都必須顯式使用out 關(guān)鍵字。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class OutExample

{

   static void Method(out int i)

   {

       i = 44;

   }

   static void Main()

   {

       int value;

       Method(out value);

       // value is now 44

   }

}

盡管作為 out 參數(shù)傳遞的變量不必在傳遞之前進行初始化,但需要調(diào)用方法以便在方法返回之前賦值。

ref 和 out 關(guān)鍵字在運行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法采用 ref 參數(shù),而另一個方法采用 out 參數(shù),則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個方法是完全相同的,因此將不會編譯以下代碼:

1

2

3

4

5

6

7

class CS0663_Example

{

   // Compiler error CS0663: "Cannot define overloaded

   // methods that differ only on ref and out".

   public void SampleMethod(out int i) { }

   public void SampleMethod(ref int i) { }

}

但是,如果一個方法采用 ref 或 out 參數(shù),而另一個方法不采用這兩類參數(shù),則可以進行重載,如下所示:

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(out int i) { }

}

以下是本人根據(jù)經(jīng)驗整理出來的:

區(qū)別

ref和out的區(qū)別在C# 中,既可以通過值也可以通過引用傳遞參數(shù)。通過引用傳遞參數(shù)允許函數(shù)成員更改參數(shù)的值,并保持該更改。若要通過引用傳遞參數(shù), 可使用ref或out關(guān)鍵字。ref和out這兩個關(guān)鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。它們的區(qū)別是:

1、使用ref型參數(shù)時,傳入的參數(shù)必須先被初始化。對out而言,必須在方法中對其完成初始化。

2、使用ref和out時,在方法的參數(shù)和執(zhí)行方法時,都要加Ref或Out關(guān)鍵字。以滿足匹配。

3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調(diào)用的方法修改調(diào)用者的引用的時候。

方法參數(shù)上的 out 方法參數(shù)關(guān)鍵字使方法引用傳遞到方法的同一個變量。當(dāng)控制傳遞回調(diào)用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。

當(dāng)希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數(shù)的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數(shù)。

若要使用 out 參數(shù),必須將參數(shù)作為 out 參數(shù)顯式傳遞到方法。out 參數(shù)的值不會傳遞到 out 參數(shù)。

不必初始化作為 out 參數(shù)傳遞的變量。然而,必須在方法返回之前為 out 參數(shù)賦值。

屬性不是變量,不能作為 out 參數(shù)傳遞。

總之用一句話概括就是:ref是有進有出,而out是只出不進。

看完了這篇文章,相信你對C#中out和ref的區(qū)別是什么有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享名稱:C#中out和ref的區(qū)別是什么-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://muchs.cn/article38/ddcspp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站排名、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、App開發(fā)用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計