c# 基础 object ,new操作符,类型转换

时间:2022-06-10 05:57:02

所有类型最终都从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引用。