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);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值