1. 程式人生 > >C#之二 值傳遞和引用傳遞

C#之二 值傳遞和引用傳遞

       常用的值型別有:int double char bool decimal struct enum;
常用的引用型別有:string 陣列 自定義類 介面 委託;
值型別的值儲存在記憶體的棧上,引用型別的值儲存在堆中,棧上儲存資料的效率要高於堆。

所謂值傳遞:把值型別作為引數傳遞,把值本身進行傳遞。通過關鍵字ref可以把值傳遞改變為引用傳遞。

而引用傳遞:把引用型別的值作為引數傳遞,傳遞的是引用,也就是常說的地址。

通過VS的既時視窗可以檢視某個變數的資訊,值型別a,輸入&a,可以得出a在棧中的地址好值,引用型別得出的是在棧和隊中的地址

 static void Main(string[] args)
        {
            //值傳遞
            int number = 20;
            Fun(number);//實參
            Console.WriteLine(number);
            Console.ReadKey();
        }
        static void Fun(int num)//形參
        {
            num += 20;
        }
//輸出:20
//如果是

        static void Main(string[] args)
        {
            //值傳遞
            int number = 20;
            Fun(ref number);//實參
            Console.WriteLine(number);
            Console.ReadKey();
        }
        static void Fun(ref int  num)//形參
        {
            num += 20;
        }

//輸出:40
 static void Main(string[] args)
        {

            Person zsPerson = new Person();
            zsPerson.Name = "張三";
            Person lsPerson = zsPerson;
            lsPerson.Name = "李四";
            Console.WriteLine(zsPerson.Name);
            Console.WriteLine(lsPerson.Name);
            Console.ReadKey();
        }

        class Person
        {
            public string Name { get; set; }
        }
//輸出:李四

          李四


static void Main(string[] args)
        {

            Person zsPerson = new Person();
            zsPerson.Name = "楊過";
            Test(zsPerson);
            Console.WriteLine(zsPerson.Name);
            Console.ReadKey();

        }

        static void Test(Person p)
        {
            p.Name = "小仙女";
            Person p2 = new Person();
            p2.Name = "小龍女";
            p = p2;
        }

    }

        class Person
        {
            public string Name { get; set; }
        }
//輸出:小仙女