代码之家  ›  专栏  ›  技术社区  ›  TheColonel26

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

  •  1
  • TheColonel26  · 技术社区  · 7 年前

    我在google中没有找到任何关于这个场景的信息。

    我想这样做的原因是,如果您愿意的话,我希望能够定义multiplier do“do er”方法,但我希望将对该方法的所有调用封装在锁中。我不想让方法实现者记住在方法中加锁,我也不想让他们在没有锁的情况下调用方法。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ron Beyer    7 年前

    您可以通过使用访问修饰符来完成此操作:

    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

    实际上,如果您想保护对某个资源的访问,您应该锁定对该资源的调用,但不要试图强制用户代码以某种模式实现。例如,如果需要锁定字典访问,请使用适当的类型( ConcurrentDictionary )或设置访问 private 并在基类中提供getter/setter/deleter方法并使用其中的锁。