【发布时间】:2014-10-01 05:44:01
【问题描述】:
我正在实现一个使用复合设计模式的菜单系统。我有以下 MenuElement 界面:
public interface MenuElement
{
void AddMenuElement( MenuElement menuToAdd );
void RemoveMenuElement( MenuElement menuToRemove );
MenuElement GetMenuElement( int index );
void Activate();
}
我正在考虑在这个接口中包含一个“OnActivate”事件,以便实现这个接口的 MenuItem 在激活时可以触发功能。我尝试这样实现它:
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 不同,它需要 object 和 EventArgs 参数。我也考虑过移动我的事件并委托给 MenuItem,但我仍然很好奇是否可以让界面包含自定义事件。
这可能吗?还是在这种情况下我必须使用 C# 的 EventHandler 类?
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
1.没有理由在接口中声明委托类型。 2. 为什么不你想要标准的
EventHandler签名?它的存在是有充分理由的,然后你只有public event EventHandler<MyEventArgs> Activated; -
之所以不想使用EventHandler,是因为想着用不带任何参数的函数来处理事件。在处理无参数事件处理函数的情况下,您会怎么做?
标签: c# events interface delegates