override是对积累方法的重写,需要重写的方法在该类的基类中需要用virtual或abstract来修饰,当然用virtual来修饰的方法有自己的实现,而用abstract来修饰的方法不允许有实现,只允许继承该类的子类重新写该方法且子类必须有实现的方法。

我们来看一个例子来表述两个字段的不同

 

  abstract class AnmialClass
    {
        private  int foot;
        public int Foot
        {
            get { return foot; }
            set { foot = value; }
        }
        public abstract void Mess();
        public virtual void Mess1()
        {
            MessageBox.Show("我是Mess1");
        }
        public void mess2()
        {
            MessageBox.Show("我是Mess2");
        }

    }

  这是父类的相关定义

 class PeopleClass:AnmialClass
    {
        public override void Mess()
        {
            MessageBox.Show(“我是子类的Mess”);
        }
        public override void Mess1()
        {
            MessageBox.Show("我是子类的Mess1");
        }
        public new  void Mess2()
        {
            MessageBox.Show("我是子类的Mess2");
        }
    }

  该类时继承AnmialClass类的子类

 PeopleClass pe = new PeopleClass();
            pe.mess();
            pe.mess1();
            pe.mess2();
 AnmialClass p =  pe as AnmialClass;

            p.mess1();
            p.mess2();

我们将会发现输出的结果是:

”我是子类的Mess“

”我是子类的Mess1“

”我是子类的Mess2“

”我是子类的Mess1“

“我是Mess2”

new修饰符只是将方法隐藏,当父类被实例化时,通过父类调用的方法依然是父类的方法,而overide是把父类方法重写。

posted on 2012-11-12 11:06  啄木鸟家园  阅读(252)  评论(0编辑  收藏  举报