c# – .NET事件 – 阻止订阅者订阅事件

假设我有一个暴露事件的“处理器”接口 – OnProcess.通常,实现者进行处理.因此,我可以安全地订阅此事件,并确保它将被解雇.但是一个处理器不进行处理 – 因此我想阻止订户对其进行处理.我能这样做吗?换句话说,在下面的代码中,我希望最后一行抛出异常:

var emptyProcessor = new EmptyProcessor();
emptyProcessor.OnProcess += event_handler; // This line should throw an exception.
最佳答案
class EmptyProcessor : IProcessor {

    [Obsolete("EmptyProcessor.OnProcess should not be directly accessed", true)]
    public event EventHandler OnProcess { 
        add { throw new NotImplementedException(" :( "); }
        remove { }
    }
}

在这种情况下,Obsolete上的true参数会导致编译时异常.所以:

EmptyProcessor processor1 = new EmptyProcessor();
IProcessor processor2 = new EmptyProcessor();

processor1.OnProcess += handler;  // <-- compile-time error
processor2.OnProcess += handler;  // <-- run-time error

转载注明原文:c# – .NET事件 – 阻止订阅者订阅事件 - 代码日志