是否可以在派生类中实现抽象方法,但只能在基类中调用抽象方法?

时间:2018-09-02 00:41:19

标签: c# inheritance

在谷歌搜索时,我没有发现任何有关此确切场景的信息。

在C#中是否可以允许在派生类中实现抽象方法,但只能在基类中实现?

我要这样做的原因是,如果可以的话,我希望能够定义multiplier do“ do-er”方法,但是我想将对该方法的所有调用包装在一个锁中。我不想让方法实现者记住要在其方法中放置锁,而且我不希望他们能够在没有锁的情况下调用该方法。

保护它到这个级别并不是绝对必要的,但是我认为如果可以的话,那会很好。

1 个答案:

答案 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方法并使用锁在那里。