02.继承

01.继承的类型

  • 单重继承 :表示一个类可以派生自一个基类。C#采用这种
  • 多重继承:表示一个类派生自多个类,C#不支持多继承,允许接口多重继承。
  • 多层继承:多层继承允许继承有更大的层次结构,类B派生自类A,类C又派生自类B,其中类B为中间基类。很常用
  • 接口继承:允许多重继承,详见接口文章

补充:
结构继承自System.ValueType ,但是结构不支持继承,却可以实现任意多接口。
类继承自System.Object,不支持多继承,但是可以实现任意多接口。

02. 实现继承

如果一个类和接口都用于派生,那么类在前接口在后,中间用逗号分隔。

虚方法

把一个基类方法声明成 Virtual,就可以在任意派生类中重写该方法。

public class Shape
{
    public virtual int X { get; set; } //基类中虚属性
    public virtual void Draw()=> Console.WriteLine("基类中的方法....."); //基类中的虚方法
}

注意点:
成员字段和静态函数都不能声明为Virtual,只对类中的实例函数成员有意义。
重写基类方法的时候,方法的签名必须和基类中的完全匹配,否则以后创建的新成员就不能覆盖继承成员。

隐藏方法

如果签名相同的方法在基类和派生类中都有声明,但该方法并没有声明为Virtual或者override ,派生类方法就会隐藏基类方法。
或者使用new关键字,隐藏基类的方法。

调用基类方法

使用关键字base.MethodName()来调用基类中的方法,不仅可以调用重写的方法,任何方法都可以调用(包括属性)。

抽象类和抽象方法

C#允许把类和方法声明为abstract。抽象类不能实例化,而抽象方法不能直接实现,必须在非抽象的派生类中重写。抽象方法必须存在抽象类中。也就是说如果一个方法是抽象的,那这个类就一定是抽象的。反之,如果一个类是抽象的,那其中的成员不一定是抽象的。如果继承了抽象类,就必须实现其所有的抽象成员。

03.修饰符

访问修饰符说明
Public任何代码均可访问
Protected只有派生的类型才能访问该项
Internal只能在包含它的程序集中才能访问
Private在能在它所属的类型中访问
Protected Internal只能在该程序集和它的派生类型中访问

04.接口

接口关键字 interface,默认访问修饰符internal, 接口也是可以多继承的,和类相似。

//定义接口 
public interface IDisposable
{
    void Disposable();
} 
//继承接口
public class SomeClass : IDisposable
{
    //实现接口
    public void Disposable()
    {
        throw new NotImplementedException();
    }
}

05.is和as运算符

as 运算符 判断类型是否可以转换成功,如果成功就返回该类型,如果失败返回null
is 运算符 返回值是 bool 类型的

var rectangle = new Rectangle();
var en = rectangle as Shape;
if (en != null)
{
    Console.WriteLine("转换成功....");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值