真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中out和ref的區(qū)別是什么

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

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出德化免費(fèi)做網(wǎng)站回饋大家。

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

兩者都是按地址傳遞的,使用后都將改變?cè)瓉?lái)參數(shù)的數(shù)值。

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

ref(C# 參考)

ref 關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在方法中對(duì)參數(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 在運(yùn)行時(shí)的處理方式不同,但在編譯時(shí)的處理方式相同。因此,如果一個(gè)方法采用 ref 參數(shù),而另一個(gè)方法采用 out 參數(shù),則無(wú)法重載這兩個(gè)方法。例如,從編譯的角度來(lái)看,以下代碼中的兩個(gè)方法是完全相同的,因此將不會(huì)編譯以下代碼:

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) { }

}

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

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(ref int i) { }

}

out(C# 參考)

out 關(guān)鍵字會(huì)導(dǎo)致參數(shù)通過(guò)引用來(lái)傳遞。這與 ref 關(guān)鍵字類似,不同之處在于 ref 要求變量必須在傳遞之前進(jìn)行初始化。若要使用 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ù)傳遞的變量不必在傳遞之前進(jìn)行初始化,但需要調(diào)用方法以便在方法返回之前賦值。

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

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) { }

}

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

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(out int i) { }

}

以下是本人根據(jù)經(jīng)驗(yàn)整理出來(lái)的:

區(qū)別

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

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

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

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

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

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

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

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

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

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

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


本文標(biāo)題:C#中out和ref的區(qū)別是什么
網(wǎng)址分享:http://weahome.cn/article/ispdjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部