在我的项目中,我需要实现一个事件,当弹出窗口或类似事件被拉起时触发,以便我可以关闭需要隐藏的任何内容,无论出于何种原因。实现从接口继承的事件
对于背景下,我在这里打球的3个文件,其中MainShell
触发事件,IShell
这是MainShell
实现的接口和定义的事件,Reports
来监听事件。我可以把这个事件放在MainShell
中,让一切变得更简单,但是如果我这样做的话,项目引用将变成循环的。这正是我必须努力的。但是,我可以参考IShell
接口,该接口定义MainShell
使用的功能。不幸的是,似乎试图从派生类/接口中使用事件会导致实现由于某种原因变得非常复杂和挑剔。
在我的接口文件:
public class ModuleShownEventArgs : EventArgs { }
public delegate void ModuleShownEventHandler(object sender, ModuleShownEventArgs e);
public interface IShell {
event ModuleShownEventHandler ModuleShown;
... }
在我的听力课:
public Reports() {
...
Container.Shell.ModuleShown += Shell_ModuleShown;
... }
private void Shell_ModuleShown(object sender, ModuleShownEventArgs e) {}
在我的激发事件类:
event ModuleShownEventHandler IShell.ModuleShown
{
add
{
((IShell)this).ModuleShown += value;
}
remove
{
((IShell)this).ModuleShown -= value;
}
}
public void OnModuleShown()
{
ModuleShownEventHandler handler = ((IShell)this).ModuleShown;
if (handler != null)
handler(this, new ModuleShownEventArgs());
}
我已经成功地阻止大部分的编译器的抱怨,但我有一个问题:有一个错误,我分配handler = ModuleShown
,
事件“IShell.ModuleShown”只能出现在左侧的 + =或 - =
这使我很容易地从我的事件比较null
检查,并阻止我从发射我的事件。
问题
我怎样才能得到这个工作?为什么我不能解雇我的活动?为什么当定义事件来自基类/接口时,定义事件变化如此激烈?请记住,这个项目相当庞大,我最近才开始研究它,所以我不能对它进行彻底的结构修改。
我使用的是Visual Studio 2013,而我的项目的.NET Framework版本是4.0。
你是否尝试过同样的事情,但没有明确实现IShell(你没有显示完整的类声明,但在我看来IShell必须明确实现)?该处理程序分配(除其他外,如您在下面的注释中提到的)只能在定义事件属性的类的方法中执行;也许这需要投给IShell违反该规则。 –
没问题,开心我可以帮忙。 –