1 【1】 //new的操作相当于根据类的定义在内存中创建一块独立的区域
2 //所以两个对象修改各自的属性不受影响。
3
4 Person p1 = new Person();
5 p1.Height = 180;//修改p1指向的对象的Height属性的值为180
6
7 Person p2 = new Person();
8 p2.Height = 190;
9
10 Console.WriteLine(p1.Height);//输出180
11 Console.WriteLine(p2.Height);//输出190
1 【2】 //int、decimal、bool、byte、enum等基础类型(值类型)是传递拷贝;
2 //对象(引用类型)则是传递引用。
3 //因为基础类型不怎么占内存,而对象则比较占内存。
4 Person p1 = new Person();
5 p1.Height = 180;//修改p1指向的对象的height字段的值为180
6
7 Person p2 = p1;//p2指向p1当前指向的对象,引用类型
8 p2.Height = 190;
9
10 //读取p1指向对象的值
11 Console.WriteLine(p1.Height);//输出190
12 Console.WriteLine(p2.Height);//输出190
13
14 //函数间传递普通的类的对象也是引用传递
15 static void DotIt(Person p)
16 {
17 p.Height = 3000;
18 }
19 DotIt(p1);
20 Console.WriteLine(p1.Height);//输出3000
21 Console.WriteLine(p2.Height);//输出3000
1【3】 Person p1 = null;//p1不指向任何的对象,
2 //如果p1之前指向过对象,则切断p1和对象间的关系
3
4 Person p1 = new Person();
5 p1.Height = 50;
6
7 p1 = null;
8 //以后如果碰到NullReferenceException,先看变量是不是指向了对象
9 p1.Height = 60;//p1没有指向任何对象
10 //所以无法“修改指向对象的height属性”,因此报错
11 //编译的错误和运行的错误
1【4】 string s1 = "ww";
2 string s2 = "cc";
3
4 //不能实现所期望的,如果想要像值类型一样交换,则必须加上关键字ref
5 static void SwapString(string a, string b)
6 {
7 string temp = a;
8 a = b;
9 b = temp;
10 }
11 //SwapString和DotIt的区别:
12 //SwapString是想要修改变量的指向
13 //DotIt是修改变量指向的对象的状态
14 static void DotIt(Person p)
15 {
16 p.Height = 3000;
17 }
18
19 SwapString(s1, s2);
20 Console.WriteLine("{0},{1}", s1, s2);//输出ww,cc
a,b,tamp互相交换指向,不改变s1,s2的指向
OOP 2014年6月8日09:54:07,布布扣,bubuko.com
时间: 2024-10-15 00:47:30