C#中的继承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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只是给枚举成员做一个范围限制。

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

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

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

以上是关于C#中的继承的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# 中的集合类(如 ArrayList)继承自多个接口,如果其中一个接口继承自其余接口?

C#对继承的理解

C#中的继承

C#中的继承与多态还有接口

我发现很难理解 C# 中的继承 [关闭]

C# 中的 C++ 模板继承等价物是啥?