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

4 篇文章 0 订阅
//多态性
编译时的多态性是通过重载(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是错误的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值