一、对象的唯一性识别:即判断两个引用是否指向了同一个对象?可以使用”= =” 操作符来比较两个引用,也可以使用System.Object的ReferenceEquals的静态方法。
二、对象的散列码:每一个对象都有一个Int32类型的散列码,这样任何对象实例就都能被放入一个散列表集合中。
三、对象克隆:如果一个类希望自己的实例能够被克隆,则该类应该实现ICloneable接口。并在接口的Clone方法中实现拷贝的语法。
四、浅拷贝:当对象的字段值被拷贝时,字段引用的对象不会被拷贝。
深拷贝:对对象实例中字段引用的对象也进行拷贝。对于对象实例字段引用的对象中又引用的对象……都要进行拷贝。也就是说,执行深拷贝后,原来的对象和新创建的对象不会共享任何东西;改变一个对象对另一个对象没有任何影响。
五、浅拷贝和深拷贝的实现:如果希望对象的实例实现浅拷贝,可以在对象的Clone方法中调用System.Object的受保护方法MemberwiseClone即可。注意:MemberwiseClone 方法不会为新对象调用构造器,值类型实例本身就支持浅拷贝。如果要实现深拷贝,则需要在我们的引用类型或者值类型的Clone方法中自己实现(当然,先要实现ICloneable接口)。因此,一个对象的Clone方法,即可能是浅拷贝,也可能是深拷贝,具体要看这个对象的说明文档。
六、对象相等:System.Oject类型中Equals方法的实现是比较两个引用是否指向同一个对象,如果我们需要判断的是两个对象是否有相同的"值",则必须重写Equals方法。如果我们定义的类型的基类型没有继承Object.Equals方法的实现(即基类型也重写了Equals方法),那么我们在重写Equals方法时应该先调用基类型的Equals方法。
七、Equals方法的两种形式:System.Object类型中的Equals方法有两种形式:
虚函数形式public virtual bool Equals(object);--它使得各个对象可以重写这个方法。
静态函数形式public static bool Equals(object, object);
--它可以保证在某个对象参数为null时,也不会抛出异常。
八、引用类型和值类型的Equals方法的不同:引用类型继承的Equals判断的是引用相等;而值类型继承的Equals判断的是值相等。
九、对象的GetType方法返回的始终是对象的原始类型:对于包装了一个父类外衣的子类对象,调用它的GetType方法,返回的类型依然是子类类型。
十、子类一定也与父类的类型相兼容:is操作符在判断一个对象与它的任何一个基类型之间的关系时,都返回true。
十一、 当父类函数和子类函数重名时,构造函数和一般函数的执行上的不同:当初始化一个子类时,会自动的按照继承的顺序,从父类向子类逐一执行各类的构造函数。而如果父类和子类都有同一个函数(不是构造函数),则不会自动调用父类的同名函数。