首页 > 代码库 > 方法的传递机制---引用类型传递
方法的传递机制---引用类型传递
.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指向该对象
方法的传递机制---引用类型传递
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。