方法的传递机制---引用类型传递
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法的传递机制---引用类型传递相关的知识,希望对你有一定的参考价值。
.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指向该对象
以上是关于方法的传递机制---引用类型传递的主要内容,如果未能解决你的问题,请参考以下文章