Jef*_*eff 7 c# inheritance overriding method-call
我有这种情况,当从ImplementClass调用AbstractMethod方法时,我想强制调用AbstractClass中的MustBeCalled方法.我以前从未遇到过这种情况.谢谢!
public abstract class AbstractClass
{
public abstract void AbstractMethod();
public void MustBeCalled()
{
//this must be called when AbstractMethod is invoked
}
}
public class ImplementClass : AbstractClass
{
public override void AbstractMethod()
{
//when called, base.MustBeCalled() must be called.
//how can i enforce this?
}
}
Run Code Online (Sandbox Code Playgroud)
一个选项是让Abstract类以这种方式进行调用.否则,c#中没有办法要求继承的类以某种方式实现方法.
public abstract class AbstractClass
{
public void PerformThisFunction()
{
MustBeCalled();
AbstractMethod();
}
public void MustBeCalled()
{
//this must be called when AbstractMethod is invoked
}
//could also be public if desired
protected abstract void AbstractMethod();
}
public class ImplementClass : AbstractClass
{
protected override void AbstractMethod()
{
//when called, base.MustBeCalled() must be called.
//how can i enforce this?
}
}
Run Code Online (Sandbox Code Playgroud)
这样做会在抽象类中创建所需的面向公众的方法,为抽象类提供调用事物的方式和顺序,同时仍允许具体类提供所需的功能.
怎么样
public abstract class AbstractClass
{
public void AbstractMethod()
{
MustBeCalled();
InternalAbstractMethod();
}
protected abstract void InternalAbstractMethod();
public void MustBeCalled()
{
//this must be called when AbstractMethod is invoked
}
}
public class ImplementClass : AbstractClass
{
protected override void InternalAbstractMethod()
{
//when called, base.MustBeCalled() must be called.
//how can i enforce this?
}
}
Run Code Online (Sandbox Code Playgroud)