结构
来源:互联网 发布: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()方法。
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- MFC 双击picture控件后弹出另外一个对话框,显示大图的策略
- Ubuntu下VIM使用指南
- 项目中长大 重构机房收费系统
- openCV中的矩阵创建和释放
- 树形DP 加分二叉树 and HDU 1520 Anniversary party
- 结构
- 过滤逗号,双引号
- 我们只谈硬件:微电子硕士的求职经历
- windows socket编程和linux socket编程的异同
- 二叉查找树
- js正则表达式
- 金工实习(二)
- boost asio 和socket 作服务器的区别
- 为什么编写DirectX程序时常出现WAVEFORMATEX未定义的错误