1. virtual声明的基本方法,可以使用override或者new来重写?效果相同?
2. 基类中的任何方法都可以使用New关键字来重写?
3. 如果是上面这样,那么virtual的意义在哪?

解决方案 »

  1.   

    给你个例子,看看new和override的区别
    using System;public class TestingClass
    {
    public static void Main()
    {
    MyClass myClass = new MyClass();
    myClass.Common();
    myClass.Virtual();
    myClass.New();
    BaseClass baseClass = myClass;
    baseClass.Common();
    baseClass.Virtual();
    baseClass.New();
    }
    }public class BaseClass
    {
    public void Common()
    {
    Console.WriteLine("BaseCommon()");
    }

    public virtual void Virtual()
    {
    Console.WriteLine("BaseVirtual()");
    }

    public virtual void New()
    {
    Console.WriteLine("BaseNew()");
    }
    }public class MyClass : BaseClass
    {
    public new void Common()
    {
    Console.WriteLine("MyCommon()");
    }

    public override void Virtual()
    {
    Console.WriteLine("MyVirtual()");
    }

    public new void New()
    {
    Console.WriteLine("MyNew()");
    }
    }
      

  2.   

    效果是不一样的。virtual方法可以被子类重写override声明重写了基类的方法,,实现了多态
    New只是在子类中又声明了一个仅仅与基类方法名一致的一个方法而以。
    楼上的例子是经典的hello word...执行virtual方法(它又叫虚方法)时,会检查子类中是否重写了该方法,如果重写了就会执行子类中重写的override方法,,,,没重写的话就执行该虚方法
      

  3.   

    1.virtual方法可以被子类重写override声明重写了基类的方法,,实现了多态
    2.New只是在子类中又声明了一个仅仅与基类方法名一致的一个方法而以
    其效果就是一是晚绑定,实现多态。
    另一个“隐匿”了基类的方法