您当前的位置: 首页 >  c#

C#事件-设计准则

发布时间:2010-11-22 00:18:00 ,浏览量:0

2010年04月22日 20:14

事件设计的四个步骤 1 在事件发行者中定义一个事件 2 在事件发行者中触发事件 3 在事件订阅者中定义事件处理程序 4 向事件发行者订阅一个事件 下面我们看一个小例子,打印出键盘的按键操作:

using System; namespace Csharpdemo {   public class EventDemo      {         public delegate void keyPress(string key); //定义与事件相关联的委托类型         public event keyPress OnkeyPress; //定义一个事件         public void isKeyPress(string key)//触发事件的方法          {             if(OnkeyPress!=null)              OnkeyPress(key);          }      }     public class eventTest      {         public void showkey(string key)//定义事件处理程序          {              Console.WriteLine("你按下了{0}键", key);          }      }     class test      {         static void Main()          {             string para = Console.ReadLine();             while (para != "exit")              {                  EventDemo ed = new EventDemo();                  eventTest et = new eventTest();                  ed.OnkeyPress += new EventDemo.keyPress(et.showkey);//注册事件                  ed.isKeyPress(para); //触发事件                  para = Console.ReadLine();              }                       }      } } 上面的事件是没有问题的,但是我们都希望自己写的东西大家一看就能明白,所以我们必须严格按照.NET FrameWork的事件设计准则去书写代码 1 事件的命名应遵循PascalCasing命名方式 2 申明delegate时使用void作为返回类型,事件接受两个传入参数一律命名为sender和e 3 定义一个事件提供数据的类对类以EventNameEventArgs进行命名,从EventArgs类派生然后添加事件的成员, 如果不需要事件提供数据的类,可以使用系统的System.EventArgs类作为类型 Eg: Public delegate void EventNameEventHander(Object sender,EventNameEventArgs e) //声明委托 通常我们需要在引发事件的类中提供一个受保护的方法以OnEventName进行命名。在该方法中引发事件 Protected virtual void OnEventName(EventArgs e) {     if(EventName!=null)     {        EventName(this,e);     } } 下面我们将上面的代码改为符合设计准则的代码:

using System; namespace CsharpEventDemo {     public class keyPressEventArgs:EventArgs      {          private string key;          public string Key          {              get { return key; }          }          public keyPressEventArgs(string _key)          {              key = _key;          }      }      public class EventSender      {          public delegate void keyPressEventHander(object sender, keyPressEventArgs e);          public event keyPressEventHander keyPress;          protected virtual void OnKeyPress(keyPressEventArgs e)          {              keyPressEventHander hander = keyPress;              if (hander != null)                  keyPress(this, e);          }          public void isKeyPress(string key)          {              OnKeyPress(new keyPressEventArgs(key));          }      }      public class EventReceive      {          public void Press(object sender, keyPressEventArgs e)          {              Console.WriteLine("您按下了{0}键" , e.Key);          }      }      class Event1      {          static void Main()          {              string para = Console.ReadLine();              while (para != "exit")              {                  EventSender es = new EventSender();                  EventReceive er = new EventReceive();                  es.keyPress += new EventSender.keyPressEventHander(er.Press);                  es.isKeyPress(para);                  para = Console.ReadLine();              }          }      } }

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    105695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0481s