A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李波 黑马帝   /  2011-12-5 20:30  /  2437 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

帮我讲讲虚方法的用途啊。怎么用的?虚方法是怎么实现多太的。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

4 个回复

倒序浏览
使用 virtual 关键字修饰的方法就是虚方法,虚方法(virtual)的关键字用于修饰属性、方法、索引器或事件声明,并使它们可以在派生类中被重写。虚方法必须并提供派生类覆
盖该方法的选项,并且必须有实现部分。虚方法的作用是可以在派生类中被重写。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
一个类的成员被定义为virtual,就意味着它在告诉自己的子类:我准备了一笔遗产,你可以全盘接受,也可以完全拒绝或者修改我的遗嘱。虚方法授予子类的权利甚至大于抽象方法。子类面对抽象方法只有重写(override)的权利,而对于虚方法,它还可以选择完全继承。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
“虚” 就是不真实的意思。假设B是A的派生类,如果A中有个方法不适合B类使用,则可以将A类的这个方法定义为虚方法(virtual)。注意“不适合”并不意味着不能重写该方法,可以重写该方法实现多态。

多态就是指“一个方法,多种实现”,静态多态就是指方法的重载,动态多态就是通过继承,抽象类的机制来实现。

举个例子:
class Program
    {
        static void Main(string[] args)
        {
            Shape s = new Circle();
            s.Draw();

            Shape s2 = new Rectangle();
            s2.Draw();//此时调用Shape类的Draw()方法

            Console.Read();
        }
    }
    class Shape
    {
        //定义一个虚方法 , 加virtual关键字
        public virtual void Draw()
        {
            Console.WriteLine("在这里画一个普通的图形");
        }
    }

    class Circle : Shape
    {   //重写了方法,实现多态
        public override void Draw()
        {
            Console.WriteLine("在这里画一个圆形");
        }
    }

    class Rectangle : Shape
    {
        //计算面积
        public void CalcArea(){ }

        //继承了父类Shape的Draw()方法
    }



评分

参与人数 1技术分 +3 收起 理由
李荣壮 + 3

查看全部评分

回复 使用道具 举报
陆亚 发表于 2011-12-6 11:56
“虚” 就是不真实的意思。假设B是A的派生类,如果A中有个方法不适合B类使用,则可以将A类的这个方法定义为 ...

:handshake很好,很强悍啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马