结构和类在C#里有哪些区别

本文对比了C#中结构和类的异同点,包括它们的声明方式、使用new运算符的情况、构造函数的存在形式等,并详细阐述了二者在类型属性、密封性、null值允许情况、析构函数等方面的差异。
在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;

转载于:https://www.cnblogs.com/sunjinbo/archive/2012/06/13/2547320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值