码迷,mamicode.com
首页 > 其他好文 > 详细

方法的传递机制---引用类型传递

时间:2017-03-30 23:01:45      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:使用   技术   不能   png   stat   朋友   console   style   namespace   

.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指向该对象

 

方法的传递机制---引用类型传递

标签:使用   技术   不能   png   stat   朋友   console   style   namespace   

原文地址:http://www.cnblogs.com/dakang/p/6648774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!