所有类型最终都从System.Object类型派生。
最基本方法(object的公共方法):
1.Equals:如果两个对象具有相同的值,返回true.
2.GetHashCode:返回对象值得一个哈希码,如果某个类型的对象要在一个哈希表集合众作为key使用,该类型应重写该方法。
3.ToSting,返回一个String对象
4.GetType:返回从Typt派生的一个对象实例,指出该对象是什么类型。返回的type对象可以和反射类配合使用,从而获取与对象的类型有关的元数据信息。
以下为受保护的方法
5.MemberwiseClon:非虚方法,能创建类型的一个新实例,并将新对象的实例字段设与this对象的实例字段完全一致,返回的是一个对新实例的一个引用。
6.Finalize:在垃圾回收时会调用该虚方法。
关于new操作符 曹衍涛
Employee e=new Employee("ConstructorParam1");
1.他计算类型及其所有基类型中定义的所有实力字段需要的字节数。 堆上每一个对象都需要一些额外成员——“类型对象指针(type object pointer)
”和“同步索引块(sync block index)”,这些成员由ClR(common language runtime)用于管理对象。这些额外成员的字节数会计入对象大小。
2.他从托管堆中分配制定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零。
3.他初始化对象的类型对象指针和同步索引成员。
4.调用类型的实例构造器,向其传入在对new的调用中制定的任何实参。(上边ConstructorParam1即为实参)
new执行完这些操作后会返回指向新建对象一个引用(或指针)。上边这个引用会保存到变量e中,后者具有Employee类型
无法显示释放分配给一个对象的内存,CLR采用垃圾回收机制。
类型转换
CLR最重要的特性之一就是类型安全性。
c#可以随意将一个对象转换为他的任何基类,当将该类型转化为他的派生类时需要进行显示转换,该转换可能会在运行时失败。
使用is和as操作符来转型
is检查一个对象是否兼容于指定类型,返回true或false,is操作符不会抛出异常。
Object o=new Object();
Boolean b1 =(o is Object)//返回true
Boolean b2 =(o is Employee)//返回false
如果对象引用为null,总是返回false
is通常这样使用
if(o is Employee)
{
Employee e=(Employee) o;
//在if剩余语句中用e
}
这样写CLR实际检查了两遍数据类型
as为其简化写法
Employee e= o as Employee;
if(e!=null)
{
//剩余语句用e
}
这样写CLR检查o是否兼容Employee,是的话返回同一对象的非null引用。