C# 虚函数

 

转自:http://www.cnblogs.com/smhy8187/articles/1686815.html

使用虚函数就是在父类中把子类*有的但却易于变化或者不清楚的特征抽取出来,作为子类需要去重新实现的操作(override),我们可以称之做“热点”。而虚拟函数也是OOP中实现多态的关键之一。

例子(C#):

 

class 飞禽

{ 

        public string wing;             // 翅膀

        public string feather;          // 羽毛  

        ……                            // 其它属性和行为  

        public virtual bool Fly()       // 利用关键字virtual来定义为虚拟函数,这是一个热点

        {

                // 空下来让子类去实现

        }

}

 

class 麻雀 : 飞禽                       // 麻雀从飞禽继承而来

{

        ……    // 定义麻雀自己特有的属性和行为

        public override bool Fly()      // 利用关键字override重载飞翔动作,实现自己的飞翔

        {

                ……    // 实现麻雀飞的动作

        }

}

 

class  鹤 : 飞禽                        // 鹤从飞禽继承而来

{

        ……    // 定义鹤自己的特有的属性和行为

        public override bool Fly()      // 利用关键字override重载实现鹤的飞翔

        {

                ……    // 实现鹤飞的动作

        }

}

 

这样我们只需要在抽象模型“飞禽”里定义Fly()这个行为,表示所有由此“飞禽”派生出去的子类都会有Fly()这个行为,而至于Fly()到底具体是怎么实现的,那么就由具体的子类去实现就好了,不会再影响“飞禽”这个抽象模型了。

 

比如现在我们要做一个飞禽射击训练的系统,我们就可以这样来使用上面定义的类:

// 如何来使用虚拟函数,这里同时也是一个多态的例子.

// 定义一个射击飞禽的方法

// 注意这里申明传入一个“飞禽”类作为参数,而不是某个具体的“鸟类”。好处就是以后不管再出现多少

// 种鸟类,只要是从飞禽继承下来的,都照打不误:)(多态的方式)

void ShootBird(飞禽 bird) 

{

        // 当鸟在飞就开始射击

        if(bird.Fly())

        {

                ……    // 射击动作

        }

}

 

static void main()

{

        / /打麻雀

        ShootBird(new 麻雀());

        // 打鹤

        ShootBird(new 鹤());    

        // 都是打鸟的过程,我只要实现了具体某个鸟类(从“飞禽”派生而来)的定义,就可以对它

        // 进行射击,而不用去修改ShootBird函数和飞禽基类

        ShootBird(new 其它的飞禽());      

}

 

C# 虚函数

上一篇:delphi WebBrowser控件上网页验证码图片识别教程(一)


下一篇:MVC API 权限控制