1. Overide and New
这两个关键字主要是用来解决继承之后方法的调用问题。默认情况C#编译器会把New加在方法返回类型之前。也就说方法用了new之后(或者活不用Override),子类方法对基类是不可见的/不可用的。
abstract class BaseClass { public BaseClass() { MethodA(); } public virtual void MethodA() { Console.WriteLine("BaseClassMethodA"); } public virtual void MethodB() { Console.WriteLine("BaseClassMethodB"); } } class Class11 : BaseClass { public override void MethodA() { Console.WriteLine("Class11MethodA"); } public override void MethodB() { Console.WriteLine("Class11MethodB"); } } class Class22 : Class11 { public override void MethodB() { Console.WriteLine("Class22MethodB"); } }
......
Class11 class11 = new Class11(); Class22 class22 = new Class22(); class11 = class22; class11.MethodA(); // out put: Class11MethodA class11.MethodB(); // out put: Class22MethodB
如果
class Class22 : Class11 { public new void MethodB() { Console.WriteLine("Class22MethodB"); } }那么class11.MethodB(); // out put: Class11MethodB