在C++里类和结构体唯一的区别在于默认的保护级别不同,结构是public,而类是priviate。回到C#这里,结构作为值类型,类作为引用类型,两者的区别就没有那么简单了。这里我简单总结了下两者的一些异同点,希望能对C#里的结构和类这部分知识能有更多显性地认识。
相同点:
1. 声明语法相似;
2. 都可以使用new运算符来赋值变量;
3. 都有实例构造函数和静态构造函数;
4. 都派生或者间接派生自object;
5. 都可以使用partical关键字;
6. 都可以实现接口;
不同点:
1. 结构是值类型,类是引用类型;
2. 结构是隐式密封的,不能被派生,而类可以;
3. 结构类型的变量不能为null,而类可以;
4. 结构不允许有析构函数;
5. 结构的预定义的无参数构造函数不可以被删除或重定义它,这和类不同;
6. 结构不使用new运算符也可以创建实例,然而这样做会有一定的限制:
a. 不能使用数据成员的值,直到显示地设置它;
b. 不能调用任何函数成员,直到所有数据成员已经被赋值;
7. 结构不允许字段初始化,而类可以;
struct Point
{
public int x; // compile OK
public int y = 0; // compile error
}
8. 结构作为返回值或值参时,会出现结构的复制,而类不会;
9. 由于结构不能被派生,所以不能使用以下修饰符:protected, internal, abstract, virtual;