事件与委托的学习:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html(很具体)
看过WPF葵花宝典一书,对小龙女在谷底被找到的叙述记忆犹新,今天想由此重现路由事件,也算自己再温习一遍了。
事件由来:
1. 小龙女在谷底求救,将自己的信息写在蜜蜂的翅膀上。
2. 老顽童抓到蜜蜂,看到了翅膀上的字。
3. 黄蓉抓到蜜蜂,看到了翅膀上的字。
4. 杨过看到翅膀上的字。
整理为路由事件,则是:小龙女写字-->蜜蜂带信-->老顽童,黄蓉,杨过看到字
代码如下:
View Code
using System; namespace ConsoleApplication1 { class Program { delegate void beeFly(string message); static event beeFly beeServer; public static void Main(string[] args) { string message= xiaolongnv(); beeServer += laowantong; beeServer +=new beeFly(huangrong); beeServer +=yangguo; beeServer(message); Console.Read(); } static string xiaolongnv() { string message = "xiaolongnv:I'm xiaolongnv,I'm at the butom of a valley.who can help me?"; return message; } private static void laowantong(string message) { Console.WriteLine("laowantong:haha,I have caught the bee?\n" + "……\n" + "where is xiaolongnv"); } private static void huangrong(string message) { Console.WriteLine("huangrong:haha,I have caught the bee?\n" + "……\n" + "Is she in a place where has many flower?"); } private static void yangguo(string message) { Console.WriteLine("yangguo:haha,I have caught the bee?\n" + "……\n" + "xiaolongnv ,where are you?I miss you"); } } }
一个简单的事件就写好了。
.Net Framework的编码规范:
- 委托类型的名称都应该以EventHandler结束。
- 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
- 事件的命名为 委托去掉 EventHandler之后剩余的部分。
- 继承自EventArgs的类型应该以EventArgs结尾。
换一种写法:
using System; namespace ConsoleApplication1 { class Program { delegate void SendMessageHander(object obj,MessageEventArgs e); static event MessageHander SendMessage; public static void Main(string[] args) { SendMessage +=new SendMessageHander(laoWanTongEventHandle.laowantong); //注册 SendMessage += new SendMessageHander(huangrongEventHandle.huangrong);//注册 SendMessage += new SendMessageHander(yangguoEventHandle.yangguo);//注册 XiaoLongNv longer = new XiaoLongNv(); longer.kezi();//事件开始发起 Console.Read(); } class XiaoLongNv { public readonly string Name; public readonly DateTime birthDate; public void kezi() { MessageEventArgs e = new MessageEventArgs(); SendMessage(this, e); } } class MessageEventArgs:EventArgs { public readonly string Message = "xiaolongnv:I'm xiaolongnv,I'm at the butom of a valley.who can help me?"; private DateTime _messageTime; public DateTime MessageTime { get { return _messageTime; } set { _messageTime = value; } } } class laoWanTongEventHandle { public static void laowantong(object obj, MessageEventArgs e) { Console.WriteLine(e.Message+"\nlaowantong:haha,I have caught the bee?\n" + "……\n" + "where is xiaolongnv"); } } class huangrongEventHandle { public static void huangrong(object obj, MessageEventArgs e) { Console.WriteLine(e.Message +"\nhuangrong:haha,I have caught the bee?\n" + "……\n" + "Is she in a place where has many flower?"); } } class yangguoEventHandle { public static void yangguo(object obj, MessageEventArgs e) { Console.WriteLine(e.Message + "\nyangguo:haha,I have caught the bee?\n" + "……\n" + "xiaolongnv ,where are you?I miss you"); } } } }

浙公网安备 33010602011771号