C# 结构与类的异同,来源于《C# 高级编程——第七版》
|
Struct |
Class |
数据类型 |
值 用作函数参数时不会改变原值,但由于复制内容,降低性能,所以一般建议使用ref |
引用 用作函数参数会改变原值 |
存储位置 |
栈 |
托管堆 |
继承 |
不支持继承 总是派生自system.ValueType,还可以派生自任意多个接口。
|
支持继承 |
构造函数 |
系统总是提供默认构造函数 不容许添加无参数的构造函数 |
若定义了构造函数,则系统不提供构造函数 |
字段 |
一般大部分或全部为public |
一般由public属性封装 |
new |
不分配内存,仅初始化字段; 也可以不使用new来初始化,手动对字段一个个的初始化 |
分配内存 |
字段默认值 |
不能:public int num=1; 因为默认构造函数把数值字段都初始化为0,把引用类型字段初始化为null,且总是隐式地给出,即使提供了其他带参数的构造函数,也是如此。提供字段的初始值也不能绕过默认构造函数。 |
可以public int num=1; |