小虾9527

导航

 

按照我个人的理解,继承和实现接口不是一个概念,结构和类型都可以实现接口,枚举不能。


话说,结构可以继承吗?

先梳理一下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只是给枚举成员做一个范围限制。

综上所述,类型,结构和枚举都能继承,但是结构不能自定义继承,枚举的自定义继承实际上不是继承;
而能被继承的只能是类型。

再回到问题上,结构可以继承吗?

答案是可以继承,但是不可以被继承。

posted on 2016-09-09 17:34  小虾9527  阅读(228)  评论(0编辑  收藏  举报