我正在实现一个使用复合设计模式的菜单系统。我有以下MenuElement接口:在接口中使用事件
public interface MenuElement
{
void AddMenuElement(MenuElement menuToAdd);
void RemoveMenuElement(MenuElement menuToRemove);
MenuElement GetMenuElement(int index);
void Activate();
}
我就在想,包括此接口的“OnActivate”事件,以便实现这个接口的MenuItems激活时能够触发功能。我尝试像这样实现它:
public interface MenuElement
{
public delegate void MenuEvent();
event MenuEvent onActivate;
void AddMenuElement(MenuElement menuToAdd);
void RemoveMenuElement(MenuElement menuToRemove);
MenuElement GetMenuElement(int index);
void Activate();
}
但是,编译器不会让我在接口中声明委托。我知道一个名为EventHandler的C#事件类型,但与我所需的MenuEvent不同,它需要对象和EventArgs参数。我也考虑过将我的事件和委托移交给MenuItem,但我仍然好奇是否可以让界面包含一个自定义事件。
这可能吗?或者我会在这种情况下使用C#的EventHandler类吗?
我编辑了您的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-10-01 05:46:22
1.没有理由在界面中声明委托类型。 2.为什么*不会*你想要标准的'EventHandler'签名?它存在一个很好的理由,然后你只是有'公共事件EventHandler激活;' –
2014-10-01 05:47:59
我不想使用EventHandler的原因是因为我在考虑使用没有任何参数的函数来处理事件。你在处理无参数事件处理函数的情况下做什么? – TheYokai 2014-10-01 06:01:58