如果您定义了一个抽象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() { ... } }