A a = new B();

来源:互联网 发布:木子软件 官网 编辑:程序博客网 时间:2024/04/29 08:25
public class A    {        public A()        {            Console.WriteLine("A");        }        public virtual void GetName()        {            Console.WriteLine("AName");        }        public virtual void GetAge()        {            Console.WriteLine("A17");        }    }    public class B:A    {        public  B()        {            Console.WriteLine("B");        }        public override void GetName()        {            Console.WriteLine("BName");        }        public new void GetAge()        {            Console.WriteLine("B17");        } }   class Program    {        static void Main(string[] args)        {            A a = new B();            a.GetName();            a.GetAge();            Console.ReadKey();        }}

输出结果

ABBNameA17

a.GetName(),由于GetName()方法在B类中被重写,所以输出的是BName,
a.GetAge(),调用的是A类下的GetAge()方法,输出A17,因为它并没有被重写,只是在B类中被new了一下,new修饰符可以显式的隐藏从基类继承的成员,在这里需要调用B类下的GetAge()方法才会输出B17。