调用重写或隐藏的基类方法

  无论是重写成员还是隐藏成员,都可以在派生类的内部访问基类成员。这在许多情况下都是很有用的,例如:

  ● 要对派生类的用户隐藏继承的公共成员。但仍能在类中访问其功能。

  ● 要给继承的虚拟成员添加实现代码,而不是简单地用重写的新实现代码替换它。

  为此,可以使用 base 关键字,它表示包含在派生类中的基类的实现代码(在控制构造函数时,其用法是类似的,如第 9 章所述),例如:

  1. public class MyBaseClass
  2. {
  3. public virtual void DoSomething()
  4. {
  5. // Base implementation.
  6. }
  7. }
  8. public class MyDerivedClass : MyBaseClass
  9. {
  10. publi override void DoSomething()
  11. {
  12. // Derived class implementation, extends base class implementation.
  13. base.DoSomething();
  14. // More derived class implementation.
  15. }
  16. }

  这段代码在 MyDerivedClass 包含的 DoSomething() 方法中,执行包含在 MyBaseClass 中的 DoSomething() 版本,MyBaseClassMyDerivedClass 的基类。因为 base 使用的是对象实例,所以在静态成员中使用它会产生错误。

  this 关键字

  除了使用第 9 章的 base 关键字外,还可以使用 this 关键字。与 base 一样,this 也可以用在类成员的内部,且该关键字也引用对象实例。只是 this 引用的是当前的对象实例(即不能在静态成员中使用 this 关键字,因为静态成员不是对象实例的一部分)。

  this 关键字最常用的功能是把当前对象实例的引用传递给一个方法,如下例所示:

  1. public void doSomething()
  2. {
  3. MyTargetClass myObj = new MyTargetClass();
  4. myObj.DoSomethingWith(this);
  5. }

  其中,被实例化的 MyTargetClass 实例( myObj )有一个 DoSomethingWith() 方法,该方法带一个参数,其类型与包含上述方法的类兼容。这个参数类型可以是类的类型、由这个类继承的类类型,或者由这个类或 System.Object 实现的一个接口。

  this 关键字的另一个常见用法是限定局部类型的成员,例如:

  1. public class MyClass
  2. {
  3. private int someData;
  4. public int SomeData
  5. {
  6. get
  7. {
  8. return this.someData;
  9. }
  10. }
  11. }

  许多开发人员都喜欢这个语法,它可以用于任意成员类型,因为可以一眼看出引用的是成员,而不是局部变量。