c#中利用new和override来控制virtual方法的版本

在继承类中,可以通过override和new来重写隐藏基类声明为virtual的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 版本控制
{
    class Program
    {
        static void Main(string[] args)
        {
            myderived md = new myderived();
            md.met1();
            md.met2();
            md.met3();
            Console.WriteLine();
            mybase mb = (mybase)md;
            mb.met1();
            mb.met2();
            mb.met3();
        }
    }

    class mybase//基类声明
    {
        public virtual void met1()//基类的方法要以virtual声明,负责不能被继承类重写隐藏
        {
            Console.WriteLine("基类met1");
        }
        public virtual void met2()
        {
            Console.WriteLine("基类met2");
        }
        public virtual void met3()
        {
            Console.WriteLine("基类met3");
        }
    }
    class myderived : mybase
    {
        public override void met1()//以override重写的方法
        {
            Console.WriteLine("继承类met1");
        }
        public new void met2()//以new来显示隐藏的方法
        {
            Console.WriteLine("继承类met2");
        }
        public void met3()//不加修饰符,以重名方法隐式隐藏的方法
        {
            Console.WriteLine("继承类met3");
        }
    }
}

可以看到当利用override重写后,即使将继承类转换为基类,调用的还是继承类的方法

利用new或隐式声明,则安照各自类的方法来调用

 

posted @ 2012-05-28 22:03  MadKeX  阅读(265)  评论(0)    收藏  举报