1:要领重写:就是在基类中的要领用virtual关键字来标识,然后在担任类中对该类进行重写
(override),这样基类中的要领在子类中已经被重写了,基类中的要领在子类中已经掉去了成果
了。当让基类的东西的引用直接指向担任类的东西时(多态性),挪用该要领例是挪用的担任类中重
写的要领。
2:要领隐藏:无论基类中的要领是否用了virtual关键字,,担任类中都可以用new关键字(如果不用new
的话,不会孕育产生错误,但会生成一个编译警告)将基类中的要领隐藏,所谓隐藏就是隐藏,不像重
写,重写就是基类中的旧要领在子类中已经不存在了,而隐藏是基类中的要领和子类中重写得到的新
要领都存在。所以当让基类的东西的引用直接指向担任类的东西时(多态性),挪用该要领例是挪用
的基类的要领。
class BaseClass { public void functionA() { Console.WriteLine("BaseFunctionA ==="); } public virtual void functionB() { Console.WriteLine("BaseFunctionB ==="); } } class DerivedClass : BaseClass { new public void functionA() { Console.WriteLine("DerivedFunctionA ==="); } public override void functionB() { Console.WriteLine("DerivedFunctionB ==="); } } class Program { static void Main(string[] args) { BaseClass b2 = new DerivedClass(); b2.functionA();//BaseFunctionA === b2.functionB();//DerivedFunctionB === Console.WriteLine("-----"); BaseClass b = new BaseClass(); b.functionA();//BaseFunctionA === b.functionB();//BaseFunctionB === Console.WriteLine("-----"); DerivedClass d = new DerivedClass(); d.functionA();//DerivedFunctionA === d.functionB();//DerivedFunctionB === Console.WriteLine("-----"); } }