在我的课程中,我想声明一个其他类可以订阅的事件.声明事件的正确方法是什么?
这不起作用:
public event CollectMapsReportingComplete;
Run Code Online (Sandbox Code Playgroud)
Jør*_*ode 34
你忘了提这个类型.对于非常简单的事件,EventHandler可能就足够了:
public event EventHandler CollectMapsReportingComplete;
Run Code Online (Sandbox Code Playgroud)
有时您会想要声明自己的委托类型以用于您的事件,允许您为EventArgs参数使用自定义类型(请参阅Adam Robinson的评论):
public delegate void CollectEventHandler(object source, MapEventArgs args);
public class MapEventArgs : EventArgs
{
public IEnumerable<Map> Maps { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用泛型EventHandler类型而不是声明自己的类型:
public event EventHandler<MapEventArgs> CollectMapsReportingComplete;
Run Code Online (Sandbox Code Playgroud)
您需要指定事件的委托类型:
public event Action CollectMapsReportingComplete;
Run Code Online (Sandbox Code Playgroud)
我在这里使用过System.Action你可以使用你想要的任何委托类型(甚至是自定义委托).您指定的委托类型的实例将用作事件的支持字段.