虚函数在C#中实现多态

首先,多态是指不同对象收到相同消息时,会产生不同动作。从而实现“一个借口,多种方法”。

C#的两种多态-----编译时多态(通过方法重载和运算符重载实现)

-------------------运行时多态(通过虚方法(virtual)实现)---virtual修饰符不能与修饰符static、abstract、和ovveride一起使用。

 

普通方法重载要求方法名相同,参数类型和参数个数不同;而虚方法重载要求方法名称、方法类型、方法参数数量、方法参数顺序、方法返回值类型都必须与基类中的虚方法完全一样。

虚方法实现多态:

class Base
    {
        public void Display()
        {
            Console.WriteLine("Display in Base");
        }
        public virtual void Print()//定义虚方法
        {
            Console.WriteLine("Print in Base");
        }
    }
    class Derived : Base
    {
        new public void Display()
        {
            Console.WriteLine("Display in Derived");
        }
        public override void Print()//重载虚方法
        {
            Console.WriteLine("Print in Derived");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Base b = new Base();
            Derived d = new Derived();
            b.Print();
            d.Print();
            b.Display();
            d.Display();
            b = d;
            b.Print();
            d.Print();
            b.Display();
            d.Display();
        }
    }

在这里Base类的实例b被赋予Derived的实例d,那么b.Print()是调用基类的方法还是派生类的方法呢?   很明显这是在运行时确定的。。。。所以根据B在某一时刻所调用的对象来确定调用哪个,体现了多态。而对虚方法Display是在编译时确定的。。。所有无论如何b.display都是调用Base类的方法。

 

posted @ 2013-04-03 22:28  四条眉毛  阅读(438)  评论(0编辑  收藏  举报