先看两个示例

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

namespace ch10ex05
{
    public class MyBaseClass
    {
        public virtual void DoSomething()
        {
            Console.WriteLine("Base imp");
        }
    }
    public class MyDerivedClass : MyBaseClass
    {
        public override void DoSomething()
        {
            Console.WriteLine("Derived imp");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyDerivedClass DerivedA = new MyDerivedClass();
            MyBaseClass BaseA = DerivedA;
            BaseA.DoSomething();
            Console.ReadKey();
        }
    }
}

运行结果是Derived imp。派生类的方法覆盖了基类中定义的方法。

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

namespace ch10ex05
{
    public class MyBaseClass
    {
        public virtual void DoSomething()
        {
            Console.WriteLine("Base imp");
        }
    }
    public class MyDerivedClass : MyBaseClass
    {
        new public void DoSomething()
        {
            Console.WriteLine("Derived imp");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyBaseClass BaseA;
            MyDerivedClass DerivedA = new MyDerivedClass();
            BaseA = DerivedA;
            BaseA.DoSomething();
            Console.ReadKey();
        }
    }
}

此时运行结果是Base imp。

派生类方法并没有覆盖基类方法,仅仅只是隐藏了而已。基类类型的BaseA即使和派生类DerivedA引用的对象一致,但是没有丢失基类的方法。

posted on 2015-04-14 10:31  若非菲lrr  阅读(85)  评论(0编辑  收藏  举报