一.所有类型都是从System.Obejct派生
1.下面两个类型定义是完全一致的:
1 class Employee{ 2 ... 3 } 4 class Employee:System.Object{ 5 ... 6 }
2.System.Object的公共实例方法
a.Equals 判断对象是否具有相等的值
b.GetHashCode 返回对象值的哈希码
c.ToString 该方法默认返回类型的完整名称( this.GetType().FullName )
d.GetType 返回从Type派生的一个对象的实例,指出调用GetType的那个对象是什么类型
3.System.Object的受保护方法
a.MemberwiseClone 这个非虚方法能创建类型的新实例,并将新对象的实例字段设与this对象的实例字段完全一致.返回的是一个对新实例的引用( 这是译文,说实话,没看懂,然后查阅了MSDN,其实这个方法的功能是创建一个浅表副本,是创建一个新对象,然后将当前对象的非静态字段复制到这个浅表副本中,即新对象中.如果字段是值类型,则执行逐位复制.如果是引用类型,则复制引用而不复制引用对象,因此,原始对象及其副本引用同一对象 )
以下是浅表复制和深入复制操作的区别
1 public class IdInfo 2 { 3 public int IdNumber; 4 5 public IdInfo(int IdNumber) 6 { 7 this.IdNumber = IdNumber; 8 } 9 } 10 11 public class Person 12 { 13 public int Age; 14 public string Name; 15 public IdInfo IdInfo; 16 17 //浅表复制 18 public Person ShallowCopy() 19 { 20 return (Person)this.MemberwiseClone(); 21 } 22 23 //深入复制 24 public Person DeepCopy() 25 { 26 Person other = (Person)this.MemberwiseClone(); 27 other.IdInfo = new IdInfo(this.IdInfo.IdNumber); 28 return other; 29 } 30 } 31 32 class Program 33 { 34 public static void DisplayValues(Person p) 35 { 36 Console.WriteLine("Name:{0:s} , Age:{1:d}",p.Name,p.Age); 37 Console.WriteLine("Value:{0:d}",p.IdInfo.IdNumber); 38 } 39 40 static void Main(string[] args) 41 { 42 //创建一个Person对象 43 Person p1 = new Person(); 44 p1.Age = 42; 45 p1.Name = "Sam"; 46 p1.IdInfo = new IdInfo(5042); 47 48 //复制p1给p2 49 Person p2 = (Person)p1.ShallowCopy(); 50 51 //展示这些值 52 Console.WriteLine("p1实例的值"); 53 DisplayValues(p1); 54 Console.WriteLine("p2实例的值"); 55 DisplayValues(p2); 56 57 Console.WriteLine("===========改变p1值的属性并展示p1和p2的值的时候==========="); 58 59 //改变p1值的属性并展示p1和p2的值的时候 60 p1.Age = 32; 61 p1.Name = "Frank"; 62 p1.IdInfo.IdNumber =7080; 63 Console.WriteLine("p1实例的值"); 64 DisplayValues(p1); 65 Console.WriteLine("p2实例的值"); 66 DisplayValues(p2); 67 68 //从结果可以看出,浅表复制由于引用类型复制了对象的引用,当该浅表中所对应原本对象的引用值发生改变时,则浅表中引用类型值 69 //也会发生改变,而原对象的值类型发生改变时,浅表中值类型的值却不会改变 70 71 Console.WriteLine("===========创建一个深入复制的对象给p3==========="); 72 73 //创建一个深入复制的对象给p3 74 Person p3 = p1.DeepCopy(); 75 p1.Name = "Gergoe"; 76 p1.Age = 22; 77 p1.IdInfo.IdNumber = 6660; 78 Console.WriteLine("p1实例的值"); 79 DisplayValues(p1); 80 Console.WriteLine("p3实例的值"); 81 DisplayValues(p3); 82 83 //从结果可以看出,深入复制是把原对象的引用类型也进行了复制,也就是说,把原对象的引用类型字段重新new了...! 84 85 Console.ReadLine(); 86 87 //以上代码结果: 88 //p1实例的值 89 //Name:Sam , Age:42 90 //Value:5042 91 //p2实例的值 92 //Name:Sam , Age:42 93 //Value:5042 94 //===========改变p1值的属性并展示p1和p2的值的时候=========== 95 //p1实例的值 96 //Name:Frank , Age:32 97 //Value:7080 98 //p2实例的值 99 //Name:Sam , Age:42 100 //Value:7080 101 //===========创建一个深入复制的对象给p3=========== 102 //p1实例的值 103 //Name:Gergoe , Age:22 104 //Value:6660 105 //p3实例的值 106 //Name:Frank , Age:32 107 //Value:7080 108 } 109 }