1.Class is a reference type, structure is a value type. 类是引用类型,数据存储在堆中。结构是数值类型,数据直接存储在栈中。但结构体也可以存储在堆中,比如一个结构体数组。结构体数组是引用类型,它的数据结构体存储在堆中。

 

2.类能够从其它类继承,本身也能被其它类继承。但结构体不能明确进行指定继承其它结构体,本身也不能被其它结构体继承。所有的类和结构体都是由.NET框架中的System.Object类派生出来。C#中,object关键字就是System.Object类的别名。

 

3.System.ValueType类直接继承System.Object类。虽然结构体不能显示指定其类,但所有的结构体都是由System.ValueType派生出来的。

 

4.C#中父类方法中关键字‘virtual’表明每一个子类都可以有它自己版本的该方法。在子类中要覆写父类中方法需要在方法前加‘override’关键字。

 

5.不同于C++C#中可以直接对类的域赋初始值,但此方法不能用于结构体。假如结构体能被这样直接初始化,将有可能降低效率。例如,创建一个这样的结构体数组时,堆会先分配给每个结构体足够的初始值均为0的空间,然后再一一对他们进行赋初始值,这样会极大影响效率。而在创建类数组时,由于类本身是引用类型,所以堆分配给它们只是一个引用空间,并不会进行初始化。初始化只会在某个类使用‘new’关键字从堆中分配了空间后才会被执行。

 

6.结构体中不允许显式有无参数的构造函数,这是为了提高创建结构体数组时的效率。但结构体永远存在一个隐式的无参构造数,因此你总可以创建不进行任何初始化的结构体。

 

7.构造函数可以调用其它构造函数,调用形式如:public Date(int year) : this(year, 1, 1) 。冒号后面构造函数的调用在前。

 

8.类中可以定义静态构造函数,只需要在其前面加上static关键字(不必加public)即可。该函数将会在任何其它构造函数执行前就被执行。即使你没有定义一个静态构造函数,在编译过程中也会自动生成一个静态构造函数用于初始化类中的所有静态域。

posted on 2013-02-09 11:49  RedHood  阅读(209)  评论(0编辑  收藏  举报