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