在C#中声明事件的语法是什么?

时间:2010-03-17 18:21:00

标签: c# events

在我的班级中,我想声明一个其他类可以订阅的事件。声明事件的正确方法是什么?

这不起作用:

public event CollectMapsReportingComplete;

5 个答案:

答案 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];