黑马程序员技术交流社区

标题: 虚方法的应用 [打印本页]

作者: 李波    时间: 2011-12-5 20:30
标题: 虚方法的应用
帮我讲讲虚方法的用途啊。怎么用的?虚方法是怎么实现多太的。
作者: 闫炳颖    时间: 2011-12-5 21:19
使用 virtual 关键字修饰的方法就是虚方法,虚方法(virtual)的关键字用于修饰属性、方法、索引器或事件声明,并使它们可以在派生类中被重写。虚方法必须并提供派生类覆
盖该方法的选项,并且必须有实现部分。虚方法的作用是可以在派生类中被重写。

作者: 田忠    时间: 2011-12-5 21:39
一个类的成员被定义为virtual,就意味着它在告诉自己的子类:我准备了一笔遗产,你可以全盘接受,也可以完全拒绝或者修改我的遗嘱。虚方法授予子类的权利甚至大于抽象方法。子类面对抽象方法只有重写(override)的权利,而对于虚方法,它还可以选择完全继承。
作者: 陆亚    时间: 2011-12-6 11:56
“虚” 就是不真实的意思。假设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()方法
    }




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

:handshake很好,很强悍啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2