5.2.3 方法屏蔽 重定义方法的一个不同手段就是要屏蔽基类的方法。当从别人提供的类派生类时,这个功能特别有价值。看清单 5.6,假设BaseClass由其他人所写,而你从它派生出 DerivedClass 。 清单 5.6 Derived Class 实现一个没有包含于 Base Class中的方法 1: using System; 2: 3: class BaseClass 4: { 5: } 6: 7: class DerivedClass:BaseClass 8: { 9: public void TestMethod() 10: { 11: Console.WriteLine("DerivedClass::TestMethod"); 12: } 13: } 14: 15: class TestApp 16: { 17: public static void Main() 18: { 19: DerivedClass test = new DerivedClass(); 20: test.TestMethod(); 21: } 22: } 在这个例子中, DerivedClass 通过TestMethod()实现了一个额外的功能。但是,如果基类的开发者认为把TestMethod()放在基类中是个好主意,并使用相同的名字实现它时,会出现什么问题呢?(见清单5.7) 清单 5.7 Base Class 实现和 Derived Class相同的方法 1: class BaseClass 2: { 3: public void TestMethod() 4: { 5: Console.WriteLine("BaseClass::TestMethod"); 6: } 7: } 8: 9: class DerivedClass:BaseClass 10: { 11: public void TestMethod() 12: { 13: Console.WriteLine("DerivedClass::TestMethod"); 14: } 15: } 在优秀的编程语言中,你现在会遇到一个真正的大麻烦。但是,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 屏蔽基类方法 1: class BaseClass 2: { 3: public void TestMethod() 4: { 5: Console.WriteLine("BaseClass::TestMethod"); 6: } 7: } 8: 9: class DerivedClass:BaseClass 10: { 11: new public void TestMethod() 12: { 13: Console.WriteLine("DerivedClass::TestMethod"); 14: } 15: }  
2/2 首页 上一页 1 2 |