using System; using System.Collections.Generic; using System.Text; namespace V6._引用傳遞ref { class Person { private string name; public string Name { get { return name; } set { name = value; } } } class Program { //值類(lèi)型賦值的時(shí)候?qū)V械臄?shù)據(jù)拷貝了一個(gè)副本 // 引用傳遞時(shí)傳遞堆本身的地址 static void Main(string[] args) { //ref int n = 100; Ml(ref n); Console.WriteLine(n); //101 Person p1=new Person (); p1.Name ="黃"; M2(ref p1); Console.WriteLine(p1.Name); //out 傳遞的是棧的地址 int m ; int n; TestOut(out m, out n); Console.WriteLine(m); //params Console.ReadKey(); } //ref 傳遞的是棧的地址 static void Ml(ref int n) { n = n + 1; } static void M2(ref Person p2) { // ref Person p2 引用傳遞不會(huì)對(duì)棧開(kāi)辟一個(gè)變量 共用一個(gè)地址 0xx01 p1 p2 公用同一個(gè)棧 // p2=new Person (); 創(chuàng)建一個(gè)新的對(duì)象 在堆開(kāi)辟一個(gè)空間 地址 0xx02 p1 p2 因公用同一個(gè)棧, p2指定修改后 p1也跟著修改 p2=new Person (); p2.Name ="金"; } //out 讓函數(shù)可以輸出多個(gè)值 //1 out參數(shù)的變量在傳遞之前不需要賦值,即使賦值了也不能在方法中使用 //2. 在方法中必須為 out參數(shù)值 static void TestOut(out int m,out int n) { m = 100; n = 99; } //params 可變參數(shù) //1.如果方法有多個(gè)參數(shù),可變參數(shù)必須作為最后一個(gè)參數(shù) //2.可變參數(shù)可以傳遞參數(shù)也可以不傳遞參數(shù),如果不傳遞參數(shù),則args數(shù)組為一個(gè)長(zhǎng)度為0的數(shù)組 //3.可變參數(shù)可以直接傳遞一個(gè)數(shù)組進(jìn)來(lái) static void TestParams(string msg, params int[] args) { if (args != null) { } } } } |
|
來(lái)自: 時(shí)間劇毒 > 《第十章:接口、抽象與密封》