[C#] out vs ref

來源:互聯網
上載者:User

標籤:資料傳遞   alt   turn   sub   display   交換   oid   技術分享   swa   

當需要從一個方法中有多個傳回值時可以考慮使用out和ref這兩個關鍵字。下面通過代碼的方式來說明兩者的用法和不同之處。

例如現在有一個如下的Add方法,Add方法只有一個傳回值。

    static int Add(int num1, int num2)    {        return num1 + num2;    }

把這個例子修改的複雜點,現在需要有4個傳回值。這時候out關鍵字就派上用場了。

    static void Maths(int num1, int num2)    {        int add = num1 + num2;        int sub = num1 - num2;        int divide = num1 / num2;        int multi = num1 * num2;    }

上述代碼中,我想將計算後的add,sub,divide,multi四個值均返回給調用方法。使用out關鍵字來改造這個方法。

    static void Maths(        int num1,         int num2,         out int add,         out int sub,         out int divide,         out int multi)    {        add = num1 + num2;        sub = num1 - num2;        divide = num1 / num2;        multi = num1 * num2;    }

使用下面的代碼調用改造後的Maths方法

    int add, sub, multi, div = 0;    Maths(10, 10, out add, out sub, out multi, out div);

兩個注意點:

1. 調用方法和被呼叫者法需要傳回值的參數需要使用out修飾;
2. 在調用方法中,不需要給out參數賦值。即使賦值了,在被呼叫者法中也會被重新計算。

再來看另一個關於交換兩個數值的例子,

    static void Swap(int num1, int num2)    {        num1 = num1 + num2;        num2 = num1 - num2;        num1 = num1 - num2;    }

使用ref關鍵字改造這個方法,

    static void Swap(ref int num1, ref int num2)    {        num1 = num1 + num2;        num2 = num1 - num2;        num1 = num1 - num2;    }

在調用方法中,需要添加ref關鍵字修飾

    int num1 = 10;    int num2 = 20;    Swap(ref num1, ref num2);

使用ref修飾的參數,會把在調用方法中的資料傳遞到被呼叫者法中。當被呼叫者法中修改了ref修飾參數的值,調用方法中的相應的參數值也會同時被修改。下面通過一張圖來表示out和ref的使用及參數關係。

總結:

當需要有多個返回參數時可以考慮使用out/ref參數;

ref資料的修改是雙向的;

out資料只從被呼叫者法傳遞至調用方法,如果調用方法給out參數賦值,被呼叫者法會忽略掉這些資料。

感謝您的閱讀~

[C#] out vs ref

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.