当前位置:  开发笔记 > 编程语言 > 正文

基类可以确定派生类是否覆盖了虚拟成员吗?

如何解决《基类可以确定派生类是否覆盖了虚拟成员吗?》经验,为你挑选了1个好方法。



1> tvanfosson..:

如果您定义了一个抽象Task和一个IHasSharedData接口,那么在Method中检查派生的Task是否在执行锁之前实现了IHasSharedData.只有实现接口的类才需要等待.我意识到这可以避免回答实际问题,但我认为这比使用反射更清晰.希望你能找到一个更好的界面名称,它更接近于类的实际功能.

public interface IHasSharedData
{
    void UpdateSharedData();
}

public abstract class Task
{
    private static object LockObject = new object();

    protected virtual void UpdateNonSharedData() { }

    public void Method()
    {
         if (this is IHasSharedData)
         {
            lock(LockObject)
            {
                UpdateSharedData();
            }
         }
         UpdateNonSharedData();
    }
}

public class SharedDataTask : Task, IHasSharedData
{
    public void UpdateSharedData()
    {
       ...
    }
}

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有