首页 > 代码库 > OOP 2014年6月8日09:54:07

OOP 2014年6月8日09:54:07

 11//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的指向