AI智能
改变未来

C#学习笔记-多态(读自C#从入门到精通 第2版)


多态

多态的概念

同一操作作用于不同的类的对象,不同的类的对象进行不同的执行,最后产生不同的执行结果。

多态的实现

C#中支持基于接口的多态和基于继承的多态,基于继承的多态设计在基类中定义方法,并在派生类中重写方法。

多态和重写是紧密联系的,重写是实现多态的重要手段。重写基类方法就是修改它的实现,或者说在派生类中对继承的基类方法重新编写。

在基类中用virtual关键字声明的方法(叫做虚拟方法)在派生类中可以重写。

// 语法访问修饰符 virtual 返回类型 方法名(){// 方法体}

示例:

class Father{...public virtual void Display() // 基类中定义成虚拟方法,使用virtual关键字{// Father does sth....}}class Son: Father{...public override void Display() // 重写基类的Display方法{// Son does sth....// 若想派生类方法执行后,继续执行基类方法,执行 base.Display() 方法base.Display();}}

重写时,子类重写方法的访问级别和父类虚拟方法的访问级别必须相同。

方法重载、重写和隐蔽

在基类和派生类中可以存在同名方法,这些同名的方法可以分为重载、重写和隐藏3种类型。

  • 重载
    重载是在同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同,就是签名不同,签名由方法名和参数组成。
    能通过传递不同的参数来决定到底调用哪一个同名方法。
    注意返回值类型不同不能构成重载,因为签名不包括返回值。
  • 重写
    基类方法中使用virtual关键字声明的方法和派生类中使用override关键字声明的方法名称相同,参数列表也相同,就是基类方法和派生类方法的签名相同,实现了派生类重写基类中的同名方法。
  • 隐藏
    基类中的方法不声明为virtual(默认为非虚方法),在派生类中声明与基类同名时,需使用new关键字,以隐藏基类同名方法。
    示例:
class Father{...public virtual void Display() // 基类中定义成虚拟方法,使用virtual关键字{// Father does sth....}public void Display(int id){// 若想执行无参方法this.Display();// 有参方法Console.WriteLine(\"id: \" + id);}}class Son: Father{...public override void Display() // 重写基类的Display方法{// do sth....// 若想派生类方法执行后,继续执行基类方法,执行 base.Display() 方法base.Display();}public new void Display(int no) // 使用new隐藏基类{// do sth....// 若想派生类方法执行后,继续执行基类方法,执行 base.Display() 方法base.Display();// 隐藏基类自定义方法Console.WriteLine(\"no: \" + no);}}
  • 点赞
  • 收藏
  • 分享
  • 文章举报

Yeats.NeverGiveUp发布了12 篇原创文章 · 获赞 0 · 访问量 164私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#学习笔记-多态(读自C#从入门到精通 第2版)