结构

来源:互联网 发布:php argv argc 编辑:程序博客网 时间:2024/04/29 18:08

 结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。

虽然结构是值类型,但在语法上常常可以把它们当作类来处理。为结构定义函数与为类定义函数完全相同.

  struct Dimensions{public double Length;public double Width;      Dimensions(double length, double width){Length= length; Width= width; }      public double Diagonal{{get{return Math.Sqrt(Length* Length + Width* Width);}}}


可以把C#中的结构看作是缩小的类。它们基本上与类相同,但更适合于把一些数据组合起来的场合。

与类的区别在于

● 结构是值类型,不是引用类型。它们存储在堆栈中或存储为内联(inline)(如果它们是另一个保存在堆中的对象的一部分),其生存期的限制与简单的数据类型一样。

● 结构不支持继承。

● 结构的构造函数的工作方式有一些区别。尤其是编译器总是提供一个无参数的默认构造函数,这是不允许替换的。

● 使用结构,可以指定字段如何在内存中布局

结构和继承

结构不是为继承设计的。不能从一个结构中继承,唯一的例外是结构(和C#中的其他类型一样)派生于类System.Object。因此,结构也可以访问System.Object的方法。在结构中,甚至可以重写System.Object中的方法-- 例如重写ToString()方法。结构的继承链是:每个结构派生于System.ValueType,System.ValueType派生于System.Object。ValueType并没有给Object添加任何新成员,但提供了一些更适合结构的执行代码。注意,不能为结构提供其他基类:每个结构都派生于ValueType。

结构的构造函数

为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数。

默认构造函数把所有的字段都初始化为0,且总是隐式地给出,即使提供了其他带参数的构造函数,也是如此。也不能提供字段的初始值,以此绕过默认构造函数。

可以像类那样为结构提供Close()或Dispose()方法。

原创粉丝点击