C#中的继承
按照我个人的理解,继承和实现接口不是一个概念,结构和类型都可以实现接口,枚举不能。
话说,结构可以继承吗?
先梳理一下C#中的继承关系,如下图:
class => [BaseClass =>] System.Object
struct => System.ValueType => System.Object
enum => System.Enum => System.ValueType => System.Object
C#中的所有类型,结构和枚举都是直接或间接继承自Object的。
一般定义一个类型可以这样写 class MyClass : Object { } 但是一般情况下,直接继承自Object都可以省略不写,直接写成这样 class MyClass { } 效果是完全一样的。
而所有的结构都是继承自ValueType,这是一个继承自Object的抽象类,但是我们自己写代码的时候不能写上这个继承关系,同样,我们也不可以定义一个类型继承自ValueType。
所有枚举都是继承自Enum,这是一个继承自ValueType的抽象类,同样我们在写代码的时候不能写上这个继承关系,我们自己也不能定义一个类型或结构是继承自Enum的。
可以说ValueType和Enum类都是.NET的私货,只允许他自己继承,不允许我们来继承。
我们编写代码的时候可以定义一个枚举继承自Int32或Byte,但是即使你这样写了,这个枚举类型还是继承自Enum,而你定义的Int32或Byte只是给枚举成员做一个范围限制。
综上所述,类型,结构和枚举都能继承,但是结构不能自定义继承,枚举的自定义继承实际上不是继承;
而能被继承的只能是类型。
再回到问题上,结构可以继承吗?
答案是可以继承,但是不可以被继承。
最新文章
- JS继承之原型继承
- powerdesigner显示列描述信息
- Servlet编程
- linux命令:xargs
- myeclipse中的weblogic 服务未正常关闭问题解决。
- Docker的学习--介绍和安装
- Ubuntu下安装Django
- POJ----(3974 )Palindrome [最长回文串]
- linux中pip安装步骤与使用详解
- EAPOL 协议
- [redis] Jedis 与 ShardedJedis 设计
- orm 通用方法——GetOneModel 条件查询一个对象
- Django admin site(一)ModelAdmin Options
- 从细菌GFF文件提取CDS序列并转换为氨基酸序列
- Ansible安装部署以及常用模块详解
- Rocketlab公司火箭Electron介绍
- 【XSY2669】归并排序 树状数组 简单组合数学
- 同一域名基于源ip地址分配给不同ip的dns配置--bind9.8.2
- 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 2、Practice Questions
- Spring Cloud Netflix项目进入维护模式