c# 继承 virtual override new

来源:互联网 发布:证件照合成软件 编辑:程序博客网 时间:2024/05/22 00:38

简单例子整理

using System;namespace ConsoleApplication1{    class BaseClass    {        public virtual void Method0()        {            Console.WriteLine("Base - Method0");        }        public virtual void Method1()        {            Console.WriteLine("Base - Method1");        }        public void Method2()        {            Console.WriteLine("Base - Method2");        }    }    class DerivedClass : BaseClass    {        public  override void Method0()        {            Console.WriteLine("Derived - Method0");        }        public new virtual void Method1()        {            Console.WriteLine("Derived - Method1");        }        public new void Method2()        {            Console.WriteLine("Derived - Method2");        }    }    class Program    {        static void Main(string[] args)        {            BaseClass bc = new BaseClass();            DerivedClass dc = new DerivedClass();            BaseClass bcdc = new DerivedClass();            // The following two calls do what you would expect. They call            // the methods that are defined in BaseClass.            bc.Method0();            bc.Method1();            bc.Method2();            // Output:            // Base - Method0    BaseClass bc = new BaseClass();        virtual -> override            // Base - Method1    DerivedClass dc = new DerivedClass();  virtual -> new virtual            // Base - Method2    BaseClass bcdc = new DerivedClass();   空      -> new            // The following two calls do what you would expect. They call            // the methods that are defined in DerivedClass.            dc.Method0();            dc.Method1();            dc.Method2();            // Output:            // Derived - Method0    BaseClass bc = new BaseClass();        virtual -> override            // Derived - Method1    DerivedClass dc = new DerivedClass();  virtual -> new virtual            // Derived - Method2    BaseClass bcdc = new DerivedClass();   空      -> new            // The following two calls produce different results, depending             // on whether override (Method1) or new (Method2) is used.            bcdc.Method0();                     bcdc.Method1();            bcdc.Method2();            // Output:            // Derived - Method0    BaseClass bc = new BaseClass();        virtual -> override            // Base - Method1       DerivedClass dc = new DerivedClass();  virtual -> new virtual            // Base - Method2       BaseClass bcdc = new DerivedClass();   空      -> new            Console.ReadKey();        }    }}
1 0