C#傳值和傳值調用分析

來源:互聯網
上載者:User

調用是傳值還是傳址,主要取決於資料類型和是否使用了ref和out,下面對此作一一分析(本文出處http://blog.csdn.net/AppleDotnet/)
首先是資料類型
C#中的資料類型按我理解的分類有
1、實值型別:
 a)除string以外的所有基本類型(如int,float,double等);
 b)結構的對象;
2、參考型別
 a)數組;
 b)類的對象;
3、特殊的系統類別型;
 a)string
 
說明:
string的特殊之處在於:傳遞string參數時,傳遞的是引用(傳址),但方法中不可以修改它,這是因為string設計上不能修改的,修改就會產生一個新的string,所以在用代碼作測試時,string會看起來像一個傳值的調用(在方法中修改不影響原先的變數)

在這裡總結一下我個人使用中的經驗,供大家參考
1、所有實值型別都是傳值調用,也就是會複製一份傳遞給被調用的方法(意味著可能多使用記憶體)
2、不需要使用ref或out,所有參考型別都是傳址調用,即參數是數組或類的對象的時候,C#就已經是用傳址調用了,再加ref是沒意義的(也不會導致出錯),但是out是有意義,因為可能需要傳入未定義的參考型別變數;
3、特殊的系統類別型string,平時使用中可以把它當作是實值型別來看,雖然它實質上不是;
4、ref參數,所有使用了ref的參數都是傳址調用————如果你不確定一個變數是值還是引用,可以濫用它;
5、out參數
 a)使用了out參數,那這個參數原先的值就是沒意義的,因為你在方法內必須構造它(注意是必須),而且根本訪問不到原先的值,編譯器會提示使用了未賦值的變數;
 b)out參數實際上不是一種調用方式,因為它什麼值也沒傳入,它可以理解為一種傳回值的約定;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.