在我的班级中,我想声明一个其他类可以订阅的事件。声明事件的正确方法是什么?
这不起作用:
public event CollectMapsReportingComplete;
答案 0 :(得分:34)
您忘了提及类型。对于非常简单的事件,EventHandler
可能就足够了:
public event EventHandler CollectMapsReportingComplete;
有时你会想要声明你自己的代表类型用于你的事件,允许你使用EventArgs
参数的自定义类型(参见Adam Robinson的评论):
public delegate void CollectEventHandler(object source, MapEventArgs args);
public class MapEventArgs : EventArgs
{
public IEnumerable<Map> Maps { get; set; }
}
您还可以使用通用EventHandler
类型,而不是声明自己的类型:
public event EventHandler<MapEventArgs> CollectMapsReportingComplete;
答案 1 :(得分:7)
您需要指定事件的委托类型:
public event Action CollectMapsReportingComplete;
这里我使用了System.Action
但你可以使用你想要的任何委托类型(甚至是自定义委托)。您指定的委托类型的实例将用作事件的支持字段。
答案 2 :(得分:3)
示例
/// </summary>
/// Event triggered when a search is entered in any <see cref="SearchPanel"/>
/// </summary>
public event EventHandler<string> SearchEntered
{
add { searchevent += value; }
remove { searchevent -= value; }
}
private event EventHandler<string> searchevent;
答案 3 :(得分:2)
public event EventHandler MyEvent;
答案 4 :(得分:0)
公共事件[DelegateType] [EventName];