C#中override与new的区别
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Demo { // 基类 public class ParentClass { public ParentClass() { Console.WriteLine("在基类的构造方法"); } // 用virtual才可以在子类中用override,而new不需要这样 public virtual void Method() { Console.WriteLine("基类的方法Method()"); } } // 继承基类 public class ChildClass1 : ParentClass { public ChildClass1() { Console.WriteLine("ChildClass1的构造方法"); } // 使用override,是说把基类的方法重新定义 public override void Method() { Console.WriteLine("ChildClass1的方法Method() use override"); } } // 继承基类 public class ChildClass2 : ParentClass { public ChildClass2() { Console.WriteLine("ChildClass2的构造方法"); } // 使用new,不是说用到基类的方法,而是重新定义一个子类方法,基方法是否virtual无所谓 // 只不过方法名称与基类相同 new public void Method() { Console.WriteLine("ChildClass2的方法Method() use new"); } } class Program { static void Main(string[] args) { // 用override子类加框一个基类对象句柄 // 输出:在基类的构造方法 ChildClass1的构造方法; ParentClass Parent = (ParentClass)new ChildClass1(); // 输出:ChildClass1的方法Method() use override Parent.Method(); // 用new子类加框一个基类对象句柄 // 输出:在基类的构造方法 ChildClass2的构造方法; ParentClass NewParent = (ParentClass)new ChildClass2(); // 输出:基类的方法Method() NewParent.Method(); // 一个子类句柄 // 输出:在基类的构造方法 ChildClass2的构造方法; ChildClass2 NewParent1 = new ChildClass2(); // 输出:ChildClass2的方法Method() use new NewParent1.Method(); Console.ReadLine(); } } } 原帖地址:http://adyhpq.blog.163.com/blog/static/3866700201011238430222/
孜孜不倦,学习不止
浙公网安备 33010602011771号