C#自定义事件的写法

C#事件基于委托

例1:只用于学习,理解事件底层原理,不推荐这么写;
例2:系统用的就是该方式,例如按钮的Click事件;
例3:最简略的写法,但是需要客户代码转换EventArgs;

1、事件声明完整格式范例:

//自定义事件参数,默认以EventArgs结尾,需要继承EventArgs类public class MyEventArgs : EventArgs{public int ID { get; set; }public string Name { get; set; }}//声明委托类型public delegate void MyEventHandler(object sender, MyEventArgs e);public class MyClass{//声明委托字段private MyEventHandler myEventHandler;//定义事件public event MyEventHandler MyEvent{add{myEventHandler += value;}remove{myEventHandler -= value;}}public void Action(){OnOrder(1, "jack");}//触发事件的方法一般命名为On???,并且不能是public,一般是protected,触发事件必须由对象自己触发,不能由外部触发private void OnOrder(int id, string name){if (myEventHandler != null){MyEventArgs e = new MyEventArgs{ID = id,Name = name};//触发事件myEventHandler.Invoke(this, e);}}}

2、事件声明简化格式范例:

//事件参数,默认以EventArgs结尾,需要继承EventArgs类public class MyEventArgs : EventArgs{public int ID { get; set; }public string Name { get; set; }}//声明委托类型public delegate void MyEventHandler(object sender, MyEventArgs e);public class MyClass{//定义事件public event MyEventHandler MyEvent;public void Action(){OnOrder(1, "jack");}//触发事件的方法一般命名为On???,并且不能是public,一般是protected,触发事件必须由对象自己触发,不能由外部触发private void OnOrder(int id, string name){if (MyEvent != null){MyEventArgs e = new MyEventArgs{ID = id,Name = name};//触发事件MyEvent.Invoke(this, e);}}}

3、事件声明通常不需要自定义委托类型,一般使用系统自带的EventHandler 类型

//事件参数,默认以EventArgs结尾,需要继承EventArgs类public class OrderEventArgs : EventArgs{public int ID { get; set; }public string Name { get; set; }}public class MyClass{//定义事件public event EventHandler MyEvent;public void Action(){OnOrder(1, "jack");}//触发事件的方法一般命名为On???,并且不能是public,一般是protected,触发事件必须由对象自己触发,不能由外部触发private void OnOrder(int id, string name){if (MyEvent != null){OrderEventArgs e = new OrderEventArgs{ID = id,Name = name};//触发事件MyEvent.Invoke(this, e);}}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部