在谷歌搜索时,我没有发现任何有关此确切场景的信息。
在C#中是否可以允许在派生类中实现抽象方法,但只能在基类中实现?
我要这样做的原因是,如果可以的话,我希望能够定义multiplier do“ do-er”方法,但是我想将对该方法的所有调用包装在一个锁中。我不想让方法实现者记住要在其方法中放置锁,而且我不希望他们能够在没有锁的情况下调用该方法。
保护它到这个级别并不是绝对必要的,但是我认为如果可以的话,那会很好。
答案 0 :(得分:2)
您可以通过使用访问修饰符来做到这一点:
public abstract class BaseClass
{
public void DoSomethingDangerous()
{
lock (someObject)
{
DoDangerous();
}
}
protected virtual void DoDangerous() { }
}
public class ChildClass : BaseClass
{
protected override void DoDangerous()
{
//Do something here
}
}
由于public
方法仅存在于基类上,因此无法直接调用“未受保护的”子方法,因此基类可以控制在什么上下文中调用“ doer”方法。
确实,如果您想保护对某些资源的访问,则应该锁定对该资源的调用,但是不要尝试强制以某种模式实现用户代码。例如,如果您需要锁定字典访问权限,请使用适当的类型(ConcurrentDictionary
)或将访问权限设置为private
并在基类中提供getter / setter / deleter方法并使用锁在那里。