您好,登錄后才能下訂單哦!
這篇文章主要講解了“C#中參數的傳遞方式是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#中參數的傳遞方式是什么”吧!
class Program { static void Main(string[] args) { int a = 10; Add(a); Console.WriteLine("傳遞之后的值為:" + a); Console.ReadKey(); } private static void Add(int i) { Console.WriteLine("傳遞之前的值為:" + i); i = i + 10; } }
結果:
可見,值類型參數在被方法調用的時候,是對本身實例的拷貝和操作,在方法調用前后參數值不變。
當引用類型參數傳遞時,是對托管堆上對象實例內容的操作。
也就是引用類型按值傳遞,傳遞的是引用變量的指針,指向托管堆上的對象實例。
class Program { static void Main(string[] args) { Student student = new Student(); Add(student); Console.WriteLine("參數傳遞之后的值為:" +student._score); Console.ReadKey(); } private static void Add(Student s) { Console.WriteLine("參數傳遞之前的值為:" + s._score); s._score = 90; } } public class Student { public int _score = 80; }
結果
可見,引用類型參數在被方法調用的時候,是針對變量的引用的操作,一旦引用對象內容發(fā)生改變,原來變量的值也隨著改變。
引用類型參數按值傳遞和按引用傳遞的不同之處:
按值傳遞,傳遞的是參數本身的值,即引用指針。
按引用傳遞,傳遞的是參數的地址,也就是實例指針。
另外,值類型也有按引用傳遞,這時候,傳遞的是值類型的地址。
class Program { static void Main(string[] args) { int i = 100; string str = "one"; ChangeByValue(ref i); ChangeByRef(ref str); Console.WriteLine(i); Console.WriteLine(str); Console.ReadKey(); } private static void ChangeByValue(ref int iValue) { iValue = 200; } private static void ChangeByRef(ref string sValue) { sValue = "One more"; } }
可見,不管是值類型,還是引用類型,加入關鍵字ref作為參數,就意味著是對參數地址的操作,即托管堆上實例地址的改變。
另外:
如果需要按引用傳遞,方法的定義和方法的調用,都要顯式地使用ref和out。
如果一個方法的參數除了ref和out關鍵字不同,還有其他參數不同,這才構成方法的2個重載。如果僅僅ref和out關鍵字不同,會報錯"...不能僅在ref和out上有差別的重載方法"。
out告訴編譯器,參數會在方法內部初始化,而在方法之前不需要初始化。
int x; Foo(out x);
ref告訴編譯器,參數在方法之前必須初始化。
int y = 0; Foo(ref y);
class Program { static void Main(string[] args) { string str = "Old String"; Console.WriteLine("傳遞之前的值為:" + str); ChangeStr(str); Console.WriteLine("傳遞之后的值為:"+str); Console.ReadKey(); } private static void ChangeStr(string astr) { astr = "Change String"; } }
結果:
可見,雖然string是引用類型,但按值傳遞的表現和值類型按值傳遞的表現一樣。
感謝各位的閱讀,以上就是“C#中參數的傳遞方式是什么”的內容了,經過本文的學習后,相信大家對C#中參數的傳遞方式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。