值类型与引用类型
来源:互联网 发布:网络直播系统搭建 编辑:程序博客网 时间: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
- 引用类型与值类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- 值类型与引用类型
- MSSQL标签表的设计
- 8086寄存器简介
- tts
- javascript变量作用域
- C#数组 枚举 结构
- 值类型与引用类型
- Low memory warning with several EGOImageView
- 可空类型与可空操作
- C#构造函数的讨论
- poj 4451 Dressing 一个小模拟 金华regional
- Static关键字和访问修饰符
- C#属性的讨论
- C#常量数据和只读字段的比较
- 求1+....+1/2+1/3+....1/20