99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

C#中out和ref的區別是什么-創新互聯

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

目前創新互聯已為1000+的企業提供了網站建設、域名、網頁空間、網站運營、企業網站設計、高唐網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

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

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

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

ref(C# 參考)

ref 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數的任何更改都將反映在該變量中。若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。

例如:

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 參數的參數必須最先初始化。這與 out 不同,后者的參數在傳遞之前不需要顯式初始化。

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

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 參數,而另一個方法不采用這兩個參數,則可以進行重載,如下例所示:

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(ref int i) { }

}

out(C# 參考)

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

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 參數傳遞的變量不必在傳遞之前進行初始化,但需要調用方法以便在方法返回之前賦值。

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

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 參數,而另一個方法不采用這兩類參數,則可以進行重載,如下所示:

1

2

3

4

5

class RefOutOverloadExample

{

   public void SampleMethod(int i) { }

   public void SampleMethod(out int i) { }

}

以下是本人根據經驗整理出來的:

區別

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

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

2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。

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

方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。

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

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

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

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

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

看完了這篇文章,相信你對C#中out和ref的區別是什么有了一定的了解,想了解更多相關知識,歡迎關注創新互聯成都網站設計公司行業資訊頻道,感謝各位的閱讀!

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

分享名稱:C#中out和ref的區別是什么-創新互聯
網頁路徑:http://www.yijiale78.com/article38/ddcspp.html

成都網站建設公司_創新互聯,為您提供網頁設計公司網站排名品牌網站建設網站導航App開發用戶體驗

廣告

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

成都定制網站網頁設計