C# 在接口后面隐藏静态类-EventHandler

C# 在接口后面隐藏静态类-EventHandler,c#,events,interface,C#,Events,Interface,我正在对一个现有的项目进行维护,该项目的静态服务类来自waazoo 基本上,我已经成功地将它们隐藏在一个接口+包装器类后面,该类直接调用现有的静态对象 但是 有些现有的静态类具有事件处理程序,而将它们包装到属性中将不起作用,因为事件处理程序只能位于+=或-=的左侧 我能想到的唯一解决方法是提供在包装类中添加和删除EventHandler的方法,然后包装类访问静态类事件处理程序 有没有办法使现有的+=和-=不需要更改 例如,静态类的现有用法是 SomeExistingStaticClass.Som

我正在对一个现有的项目进行维护,该项目的静态服务类来自waazoo

基本上,我已经成功地将它们隐藏在一个接口+包装器类后面,该类直接调用现有的静态对象

但是

有些现有的静态类具有事件处理程序,而将它们包装到属性中将不起作用,因为事件处理程序只能位于+=或-=的左侧

我能想到的唯一解决方法是提供在包装类中添加和删除EventHandler的方法,然后包装类访问静态类事件处理程序

有没有办法使现有的+=和-=不需要更改

例如,静态类的现有用法是

SomeExistingStaticClass.SomeEventHandler += MyMethod;
重构为

IStaticInterface myClass = new WrapperSomeExistingStaticClass();
myClass.SomeEventHandler += MyMethod;
在包装器中,我尝试将一些EventHandler作为一个属性,并使用如下getter

public EventHandler SomeEventHandler
{
    get
    {
        return SomeExistingStaticClass.SomeEventHandler;
    }
}

我是否缺少一些东西,或者在包装类上使用AddHandler和RemoveHandler方法的最佳解决方案是什么?

在包装类中实现一个新事件,然后实现自定义事件访问器怎么样?在这里,您可以从静态服务类重新路由事件,并保持EventHandler同步。请参阅以获取一个简单的示例。

您可以通过创建一个自定义委托集合来模拟语法,该委托集合将覆盖有问题的运算符,并在属性更改时发出通知。我想不出一个更简单的方法来同时保留功能和语法。这样我就可以保留现有的事件处理语法,而且我想它不会添加太多额外的样板代码。我希望我遗漏了一些东西,但是MSDN doco看起来非常明确,基类示例似乎证实了@nrjohnstone:我认为这首先是一个问题的唯一原因是,您试图绕过静态。代码问题往往会泄漏到其他领域。只要你无法修复设计,你就必须做你讨厌的杂七杂八的变通方法。事件非常简单,并且做得很好。不过,听起来问题不是你的错。这只是你必须要处理的事情。@Magus如此真实:-)试图在糟糕的情况下发挥最大的作用,但我不能只是进去移除静态的、黑客的解决方法