值类型与引用类型

来源:互联网 发布:网络直播系统搭建 编辑:程序博客网 时间:2024/05/12 00:42

包含引用类型的值类型

在值类型中包含引用类型成员,当对其进行复制或作为参数传递时,其中的引用类型则是将引用的指向复制过来,并没有产生副本(浅复制)

按值传递的引用类型

引用类型同值类型一样,都可以作为参数传递,但与值类型有很大的不同。例如:

定义一个Person类

 class Person    {        public string personName;        public int personAge;        public Person(string name, int age)        {            personName = name;            personAge = age;        }        public void Display()        {            Console.WriteLine("Name: {0}, Age: {1}", personName, personAge);                  }    } 

Person类对象按照值类型进行传递

static void SendAPersonByValue(Person p)        {            //修改对象的属性            p.personAge = 99;            //将对象p指向另一个对象            p = new Person("Nikki", 99);        }static void Main(string[] args)        {                        Person mel = new Person("Mel", 23 );            SendAPersonByValue(me1);            mel.Display();               }

输出结果:

Name: Mel, Age: 99

从输出结果可以看出,将引用类型对象作为值传递时,的确是将该对象的引用传递过去了,所以,在子方法中对引用成员的修改会影响主方法中的该引用类型成员,但是在子方法中讲引用参数指向另个对象并未起作用,也就是说无法把引用重新赋值给新的对象,当将引用类型作为值类型传递时,此时该引用类型转化为指针常量,就像数组名一样,只能改变其成员的值,但不能改变该常量指针的指向。

按引用传递引用类型

与前面最大的区别在于,当将引用类型以引用的方式传递时,不仅可以改变该引用类型的状态数据,还可以改变其所指向的对象。

static void SendAPersonByValue(ref Person p)        {            //修改对象的属性            p.personAge = 99;            //将对象p指向另一个对象            p = new Person("Nikki", 99);        }static void Main(string[] args)        {                        Person mel = new Person("Mel", 23 );            SendAPersonByValue(me1);            mel.Display();               }

输出结果:

Name: Nikki, Age: 99

原创粉丝点击