方法的傳遞機制---引用類型傳遞

.Net裏的方法是不能獨立存在的,調用方法必須使用類或者對象做爲主調用者。若是聲明方法包含了形參聲明,調用方法必須給這些形參指定參數值,調用方法時實際傳遞給形參的參數值被稱爲實參。
 
當引用類型做爲參數傳遞到方法中是如何傳遞的呢?下面先看一下源碼吧,猜猜輸出的結果是什麼?
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            SetPerson(person);
            Console.WriteLine("UserName={0},Age={1}", person.UserName, person.Age);
            Console.ReadKey();
        }
        static void SetPerson(Person person)
        {
            person.UserName = "kangye";
            person.Age = 25;
            person = null;
        }
    }
    class Person
    {
        /// <summary>
        /// userName字段
        /// </summary>
        private string userName;
        /// <summary>
        /// UserName屬性
        /// </summary>
        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        /// <summary>
        /// age字段
        /// </summary>
        private int age;
        /// <summary>
        /// Age屬性
        /// </summary>
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
}
輸出結果:UserName=kangye,Age=25
你猜到了嗎?好多朋友會迷惑,我明明給SetPerson方法中的person賦值爲null了,爲何還有值呢。

 

其實在傳遞的時候,實參複製了一份引用地址給了形參,在SetPerson棧區中person也是指向堆內存中的Person對象,當給Person屬性賦值以後,將SetPerson的person賦值爲null,null是不知道的意思,SetPerson棧區的person不在指向堆內存的Person對象,可是堆內存中的對象是存在的,由於main棧區的person指向該對象
相關文章
相關標籤/搜索