我有一个A派生自 class 的类B:
public class B
{
protected void Run() // pass data here used by all 3 Run methods
{
BeforeRun();
RunInternal();
AfterRun();
}
private void RunInternal()
{
}
private void BeforeRun()
{
}
private void AfterRun()
{
}
}
public class A : B
{
}
Run Code Online (Sandbox Code Playgroud)
强制从 B 类继承的用户必须调用基本方法的最近成就是什么Run()?
在您想要的地方添加protected、virtual、abstract等,我可以随意更改您的建议。
除了构造函数之外,您不能要求某人调用方法。但是类的行为不应该在构造函数中或从构造函数调用。一个类不应该仅仅因为我们实例化了它就开始做某事。当我们调用它的方法时,它应该做一些事情。
当我们设计一个类时,它通常有一个或两个方法,这些方法是该类的主要职责。创建类的实例的人将调用这些方法中的一个或多个,因为这是该类存在的唯一原因。
不是添加另一个方法并期望其他人调用它,而是设计类以便不能覆盖主要方法。唯一的public方法在基类中。被覆盖的方法不是公开的。这样基类方法总是被调用,如果你希望基类总是做某事,它总是被完成。
这样其他类不会改变所需的基类行为。他们只会扩展它。
public abstract class TheBaseClass
{
public void DoSomething()
{
AlwaysDoThis();
InheritedClassBehavior();
}
private void AlwaysDoThis()
{
//This method in the base class always gets called.
//You don't need to explicitly require someone
//to call it.
}
protected abstract void InheritedClassBehavior();
}
public class TheInheritedClass : TheBaseClass
{
protected override void InheritedClassBehavior()
{
//The inherited class has its own behavior here.
//But this method can't be called directly because
//it's protected. Someone still has to call
//DoSomething() in the base class, so AlwaysDoThis()
//is always called.
}
}
Run Code Online (Sandbox Code Playgroud)
InheritedClassBehavior受保护,所以没有什么可以直接调用它。调用它的唯一方法是调用DoSomething,这将始终调用基类中的方法AlwaysDoThis()。
InheritedClassBehavioris abstract,所以继承的类必须实现它。或者你可以实现virtual——它在基类中有一个实现,但继承的类可以覆盖它。(如果没有任何abstract方法,则基类不需要是abstract。基类只有在abstract您想阻止创建基类的实例,只允许创建继承类的情况下才会是。)
| 归档时间: |
|
| 查看次数: |
5771 次 |
| 最近记录: |