C#:study(6)--多态与virtual、abstract

//多态性
编译时的多态性是通过重载(overload)来实现
运行时的多态性是通覆写(override)虚成员实现

@虚拟方法和覆写(override)--实现运行时的多态性
        虚拟方法是指在即类中声明为virtual,又在一个或多个派生类中重新定义的方法。当派生类重新定义虚拟方法是,就要使用override关键字。虚拟方法不能被定义为static或abstract。方法重载形成了C#的一个重要概念:动态方法分配(dynamic mothod dispatch)。动态方法分配是一种在程序运行时,而不是在编译时调用重载函数的机制。动态方法分配概念非常重要,因为运行期多态靠它实现的。

         覆写(override)方法不是必须的,如果派生类没有提供覆写(override)虚拟方法,那么基类的方法就会被应用。例如:

 1 using System;
 2 class Base
 3 {
 4 public virtual void who()
 5 {
 6 Console.WriteLine("who() in Base");
 7 }
 8 }
 9 class Derived1:Base
10 {
11 public override void who()
12 {
13 Console.WriteLine("who() in Derived1");
14 }
15 }
16 class Derived2:Base
17 {//不覆写who()方法
18 }
19 
20 class NoOverrideDemo
21 {
22 public static void Main()
23 {
24 Base baseOb = new Base();
25 Derived1 dOb1 = new Derived1();
26 Derived2 dOb2 = new Derived2();
27 
28 Base baseRef;//一个基类引用
29 
30 baseRef = baseOb;
31 baseRef.who();
32 
33 baseRef = dOb1;
34 baseRef.who();
35 
36 baseRef = dOb2;
37 baseRef.who();//调用基类的方法who()
38 }
39 }


//程序输出如下:
who() in Base
who() in Derived1
who() in Base

//重载overload
方法名必须相同
参数列表必须不同
返回值类型可以不同

//覆写override
只有虚方法和抽象方法才能被覆写
相同的方法名
相同的参数列表
相同的返回值类型

//抽象(abstract)方法
必须被派生类覆写的方法。
可以看成是没有实现体的虚方法。
如果类中包含抽象方法,那么累就必须定义为抽象类,不论是否还包含其它一般方法。
abstract关键字只能用于通常的方法,不能用于静态的方法。
一起使用virtual和abstract是错误的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值