我们先看代码和运行结果,代码:
BaseClass.cs文件:
    public class BaseClass
    {
        public BaseClass()
        {
            Console.WriteLine("Base Constructed Function");
        }
        public virtual void Execute()
        {
            Console.WriteLine("Base Virtual Execute Function");
        }
        public virtual void Execute2()
        {
            Console.WriteLine("Base Virtual Execute2 Function");
        }
    }
ChildClass.cs文件:
    public class ChildClass : BaseClass
    {
        public ChildClass()
        {
            Console.WriteLine("Children Constructed Function");
        }
        public override void Execute()
        {
            Console.WriteLine("Children Execute Function");
        }
        public new void Execute2()
        {
            Console.WriteLine("Children Execute2 Function");
        }
    }
Program.cs文件:
    class Program
    {
        static void Main(string[] args)
        {
            #region 直接创建子类对象
            ChildClass A = new ChildClass();
            A.Execute();
            A.Execute2();
            #endregion
            #region 使用父类型引用子类型
            BaseClass B = new ChildClass();
            B.Execute();
            B.Execute2();
            #endregion
            Console.ReadKey();
        }
    }
运行结果:
我们有发现:
C# override,重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致,此关键字不可以用于重写非虚方法和静态方法,。
new,隐藏,是指在子类中重新定义一个签名与父类方法相同的方法,父类的同名方法只是被隐藏而未被覆盖,这个方法也可以不显示使用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。

