标签:c style class blog code java
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
标签:c style class blog code java
原文地址:http://www.cnblogs.com/skyl/p/3775796.html