通常,在C#文档中,您会遇到一个成员,其中的描述说明了“如果覆盖它,请务必调用基本方法”.
这是一个例子:
Implementing a Dispose Method
从第一行开始:
A type’s Dispose method should release
all the resources that it owns. It
should also release all resources
owned by its base types by calling its
parent type’s Dispose method.
编辑
解决方法
你不能强制执行它,但你可以通过像base.Foo(bar)这样的调用来实现它. base允许您访问要继承的类的成员.
您可以使用template method pattern来强制执行此行为.例如,假设您有此代码:
abstract class Animal { public virtual void Speak() { Console.WriteLine("I'm an animal."); } } class Dog : Animal { public override void Speak() { base.Speak(); Console.WriteLine("I'm a dog."); } }
这里的麻烦是从Animal继承的任何类都需要调用base.Speak();确保执行基本行为.您可以通过采用以下(略有不同)的方法自动执行此操作:
abstract class Animal { public void Speak() { Console.WriteLine("I'm an animal."); DoSpeak(); } protected abstract void DoSpeak(); } class Dog : Animal { protected override void DoSpeak() { Console.WriteLine("I'm a dog."); } }
在这种情况下,客户端仍然只能看到多态Speak方法,但保证Animal.Speak行为可以执行.问题是如果你有进一步的继承(例如Dachsund类:Dog),你必须创建另一个抽象方法,如果你想保证执行Dog.Speak.