标签:
按照我个人的理解,继承和实现接口不是一个概念,结构和类型都可以实现接口,枚举不能。
话说,结构可以继承吗?
先梳理一下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只是给枚举成员做一个范围限制。
综上所述,类型,结构和枚举都能继承,但是结构不能自定义继承,枚举的自定义继承实际上不是继承;
而能被继承的只能是类型。
再回到问题上,结构可以继承吗?
答案是可以继承,但是不可以被继承。
标签:
原文地址:http://www.cnblogs.com/lpz89/p/5857489.html