C#中的继承

一、继承的类型

C#采用单重继承(一个类可以派生自一个基类),不支持多重继承(一个类派生自多个类),但是允许接口的多重继承。

多层继承允许继承有更大的层次结构,如类B派生自类A,类C又派生自类B。

C#允许类型派生自多个接口。一个类型可以实现多个接口。

C#类可以派生自另一个类和任意多个接口。

准确地说,因为System.Object是一个公共的基类,所以每一个C#类(除Object类)都有一个基类,还可以有任意多个接口。

结构不支持实现继承,但支持接口继承。

结构总是派生自System.ValueType,它们还可以派生自任意多个接口。

类总是派生自System.Object或用户选择的另一个类,它们还可以派生自任意多个接口。

二、继承的实现

1.如果类和接口都用于派生,类总是必须放在接口的前面。

2.【无论是用public还是private修饰的构造方法都不能被继承】

【成员变量都能被继承,private类型不能直接访问,需要借助公有的get和set方法来调用】

【private修饰的成员方法不能被继承】

3.基类方法声明为virtual,就可以在任何派生类中重写该方法。

可以把virtual与表达式体方法一起使用当实现代码只有一行的时候。

4.可以将属性声明为virtual,对于虚属性与重写属性,语法要与非虚属性相同且添加关键字virtual。

public virtual Size Size { get; set; }

5.C#中,函数在默认情况下不是虚拟的,但(构造函数除外)可以显示的声明为virtual。

6.重写基类方法的时候,所有参数类型和方法名以及返回类型必须完全匹配,否则,以后创建的新成员就不覆盖基类成员。

7.使用多态性,可以动态的定义调用的方法,而不是在编译期间定义。编译器创建了一个虚拟方法表,列出了可以在运行期间调用的方法,它根据运行期间的类型调用方法。

8.如果签名相同的方法在基类和派生类中都进行了声明,但是该方法没有分别声明为virtual和override,派生类方法会隐藏基类方法。

9.C#中base.<MethodName>()可以用于从派生类中调用方法的基类版本。

使用base关键字,可以调用基类的任何方法——-不仅仅是已经重写的方法。

10.抽象类不能实例化。

抽象方法不能实现,必须在非抽象的派生类中重写。

11.如果类包含抽象方法,那么类也是抽象的,必须声明为抽象。

12.从抽象基类中派生类型时,需要实现所有抽象成员,否则编译器会报错。

13.给类添加sealed修饰符,就不允许创建该类的子类。密封一个方法,表示不能重写该方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a_dafei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值