类与结构的区别

      类(class)与结构(struct)都是创建对象的模版,每个对象都包含数据,并提供了处理和访问数据的方法。类与结构的区别是它们在内存中的存储方式、访问方式和一些特性的不同,它们主要区别在于:

  • 类是引用类型,结构是值类型。类的存储是在堆(heap)上,而结构的存储是在堆栈(stack)中或存储为内联(inline),存储为内联是因为如果它们是另一个保存在堆栈中的对象的一部分。结构其生存期的限制与简单的数据类型一样。
  • 类支持继承,结构不支持类继承。
  • 使用结构,可以指定字段如何在内存中布局。

      类的存储是在堆上,通过这种方式可以在数据的生存期上获得很大的灵活性,但性能会有一定损失,通过托管堆的优化,这种性能损失很小。在大多情况下,类比结构常用的多,但有时仅需要一个小的数据类型,此时,类提供的功能多余我们需要的功能,何必损失性能,此时最好使用结构。结构与类在语法上都很相似,主要区别在于使用的声明关键字(class和struct)。

类的声明:

public class Demo

{

private int ID;

private string Name;

public const string Day="Monday";

public Demo(int ID,string Name)

{

this.ID=ID;

this.Name=Name;

}

}

结构的声明:

struct DemoStruct

{

private int ID;

private string Name;

Demo(int id,string name)

{

ID=id;

Name=name;

}

}

对于类和结构都是使用new关键字来声明实例的。

Demo demo=new Demo();

DemoStruct demostruct=new DemoStruct();

上面我们说到,结构是值类型,但在语法上我们把它当做类来处理。

DemoStruct demostruct=new DemoStruct();

demostruct.ID=1;

但因为结构是值类型,所以new运算符与类的其它引用类型工作方式不同,new运算符并不分配堆中的内存,而是调用相应的构造函数,根据传递给它的参数,初始化所有的字段。所以可改写为:

DemoStruct demostruct;

demostruct.ID=1;

如果上面是一个类就会报错,demostruct包含一个未初始化的引用(不指向任何地方的一个地址),所以不能给其字段赋值,对于结构,变量声明实际上是为整个结构分配堆栈中的空间,这样就可以赋值了。

      好了,结构与类就说到这吧。

posted @ 2011-07-29 17:42  flute  阅读(699)  评论(0编辑  收藏  举报