5.2.3 方法屏蔽
重定义方法的一个不同手段就是要屏蔽基类的方法。当从别人提供的类派生类时,这个功能特别有价值。看清单 5.6,假设BaseClass由其他人所写,而你从它派生出 DerivedClass 。
清单 5.6 Derived Class 实现一个没有包含于 Base Class中的方法
在这个例子中, DerivedClass 通过TestMethod()实现了一个额外的功能。但是,如果基类的开发者认为把TestMethod()放在基类中是个好主意,并使用相同的名字实现它时,会出现什么问题呢?(见清单5.7)
清单 5.7 Base Class 实现和 Derived Class相同的方法
在优秀的编程语言中,你现在会遇到一个真正的大麻烦。但是,C#会给你提出警告:
hiding2.cs(13,14): warning CS0114: 'DerivedClass.TestMethod()' hides inherited member
'BaseClass.TestMethod()'. To make the current method override that implementation, add
the override keyword. Otherwise add the new keyword.
(hiding2.cs(13,14):警告 CS0114:'DerivedClass.TestMethod()' 屏蔽了所继承的成员
'BaseClass.TestMethod()'。要想使当前方法改写原来的实现,加上 override关键字。否则加上新的关键字。具有了修饰符new,你就可以告诉编译器,不必重写派生类或改变使用到派生类的代码,你的方法就能屏蔽新加入的基类方法。清单5.8 显示如何在例子中运用new修饰符。
清单 5.8 屏蔽基类方法