事件与委托的学习: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");
            }
        }
    }
}

 

posted on 2012-09-08 18:19  feuji  阅读(96)  评论(0)    收藏  举报