NET基础(1):类型基础

所有类型都从System.Object 派生,‘运行时’要求每个类型都从System.Object类派生,也就是说,以下两个类型定义完全一致:

//隐式派生字Object
class Employee
{
   do something.....
}

//显式派生字Object
 class Employee:System.Object
{
   do something.....
}

由于所有类型最终都是从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法,System.Object提供了一下公共实例方法:

1、Equals:如果两个对象具有相同的值,就返回true。

2、GetHashCode:返回对象的值的哈希。

3、ToString:默认返回类型的完整名称(this.GetType().FullName).

4、GetType:返回Type派生的一个类型的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合,获取与对象的类型有关的元数据信息。

 

CLR要求所有的对象都使用New关键字创建,以下代码展示了如何创建一个Employee对象:

Employee e = new Employee("ConstructorParameter");

以下是New操作符所做的事情

1、计算类型及其所有的基类型(一直到System.Object,虽然他没有定义自己的实例字段)中定义的所有实例需要的字节数,堆上每个对象都需要一些额外的成员,包括类型对象指针(type object poniter) 和 同步块索引(sync block index)。CLR利用这些成员管理对象,额外成员的字节要计入成员的大小。

2、从托管堆中分配类需要的字节数,从而分类对象的内存,分配所有的字节都设为零。

3、初始化对象的“类型对象指针”和“同步索引块”成员。

4、调用类型的实例构造器,传递在New调用中指定的实参。

 

new执行了所有这些操作之后,返回指向新建对象的一个引用(指针)。

注: 没有和New操作符对应的delete操作符:换言之没有办法显式的释放为对象分配的内存,CLR采用了垃圾回收机制(GC)自动检测到一个对象不再被使用和被访问,并自动释放对象的内存。

 

posted @ 2016-05-28 15:13  青春岁月,无怨无悔  阅读(186)  评论(0编辑  收藏  举报