当前位置: 首页 > news >正文

国外视频模板网站e比较好的网站建设平台

国外视频模板网站e,比较好的网站建设平台,物联网解决方案,自助建站系统源码下载- 引自:Artech 我们知道对于两个不具有继承关系的两个类型#xff0c;如果没有为它们定义转换器#xff0c;两这之间的类型转换是不允许的#xff0c;Delegate也是如此。但是有时候我们却希望“兼容”的两种Delegate类型能够进行转换#xff0c;比较典型的就是表示事件的De…- 引自:Artech 我们知道对于两个不具有继承关系的两个类型如果没有为它们定义转换器两这之间的类型转换是不允许的Delegate也是如此。但是有时候我们却希望“兼容”的两种Delegate类型能够进行转换比较典型的就是表示事件的Delegate。.NET Framework为我们定义了类型EventHandler来表示事件但是却没有规定事件的Delegate类型是EventHandler的子类。原则上讲事件可以是任意类型的Delegate但是我们使用的事件一般具有如下两个共同点  •不具有返回类型或者返回类型为void  •有且只有两个输入参数其一个参数类型为Object第二个类型是EventArgs的子类。  如果事件的类型不是EventHandler的子类我们是不可以将一个EventHandler对象对事件进行注册的。如果我们能够将EventHandler对象转换成事件对应的类型那么就可以到达这样的目的将同一个EventHandler注册给任意的事件。我们举个简单的例子假设我们具有这样一个需求对于指定的某个对象需要在它每一个事件触发的时候我们进行响应的日志记录。具体实现如下面的代码所示具体的日志记录实现在Log方法中RegisterEventHandlerT方法中我们通过反射的方式获取类型T中定义的所有Event并将指定的EventHandler针对这些事件进行注册。由于类型可能不一致我们通过调用自定义的EventHandlerConverter的静态方法Convert进行类型转换。[源代码从这里下载]     1: static void RegisterEventHandlerT(T target, EventHandler eventHandler)  2: {  3:   EventInfo[] events  typeof(T).GetEvents();  4:   foreach (EventInfo eventInfo in events)  5:   {  6:     eventInfo.AddEventHandler(target, EventHandlerConverter.Convert(eventHandler, eventInfo.EventHandlerType));  7:   }  8: }  我们通过如下的代码定义了一个类型Foo它具有Bar、Baz和Qux三个事件其Delegate类分别是BarEventHandler、BazEventHandler和QuxEventHandler。当RaiseEvents方法被调用的时候注册的三个事件被触发。     1: public class BarEventArgs : EventArgs  2: { }  3: public class BazEventArgs : EventArgs  4: { }  5: public class QuxEventArgs : EventArgs  6: { }  7:    8: public delegate void BarEventHandler(object sender, BarEventArgs e);  9: public delegate void BazEventHandler(object sender, BazEventArgs e); 10: public delegate void QuxEventHandler(object sender, QuxEventArgs e); 11:   12: public class Foo 13: { 14:   public event BarEventHandler Bar; 15:   public event BazEventHandler Baz; 16:   public event QuxEventHandler Qux; 17:     18:   public void RaiseEvents() 19:   { 20:     if (null ! Bar) Bar(this, new BarEventArgs()); 21:     if (null ! Baz) Baz(this, new BazEventArgs()); 22:     if (null ! Qux) Qux(this, new QuxEventArgs()); 23:   } 24: }  现在我们在Main方法中编写如下的程序。从输出结果可以看出同一个EventHandler是否能够成功注册给Foo中不同类型的三个事件。     1: class Program  2: {  3:   static void Main(string[] args)  4:   {  5:     Foo foo  new Foo();  6:     RegisterEventHandlerFoo(foo, Log);  7:     foo.RaiseEvents();  8:   }  9:   10:   static void Log(object sender, EventArgs e) 11:   { 12:     Console.WriteLine({0}: {1}, sender.GetType().Name, e.GetType().Name); 13:   }     14: }  输出结果     1: Foo: BarEventArgs  2: Foo: BazEventArgs  3: Foo: QuxEventArgs  实现在EventHandlerConverter的静态方法Convert方法中的EventHandler与兼容Delegate类型之间的转换是通过“Emit”的机制实现具体的实现逻辑如下面的代码片断所示。IsValidEventHandler方法用于验证指定的类型是否与EventHandler兼容按照上面提及的标准进行验证在Convert方法中我们通过Emit的方式创建了一个DynamicMethod 对象并最终调用CreateDelegate方法将指定的Delegate对象转换成目标Delegate类型。泛型方法ConvertTDelegate以强类型的方式指定转换的目标类型。     1: public static class EventHandlerConverter  2: {  3:   public static bool IsValidEventHandler(Type eventHandlerType, out ParameterInfo[] parameters)  4:   {  5:     Guard.ArgumentNotNull(eventHandlerType, eventHandlerType);  6:     if (!typeof(Delegate).IsAssignableFrom(eventHandlerType))  7:     {  8:       parameters  new ParameterInfo[0];  9:       returns false; 10:     } 转载于:https://www.cnblogs.com/CLR010/archive/2012/11/02/2752037.html
http://www.zqtcl.cn/news/132856/

相关文章:

  • iis添加网站的物理路径有资源的公众号
  • 答建设网站建网站的设备
  • 网站新闻专题怎么做python 做网站 用哪个框架好
  • 聊城做网站做的不错的网页链接打不开
  • 网站建设遇到的问题wordpress首页布局修改
  • 网站上传 404小猫mip网站建设
  • 网站的运营长春seo外包
  • 成都 网站制作购物网站建设包括哪些
  • 浅谈电子商务网站建设产品推广方案怎么做
  • 做ppt的图片素材网站北京网站制作南昌
  • 全网视频合集网站建设宏基陆通工程建设有限公司网站
  • 极捷号网站建设wordpress搬家500错误
  • 网站加友情链接app开发培训课程
  • 济南网站排名优化报价平台推广话术
  • 自己做的创意的网站短链接生成站长工具
  • 爱站网是怎么回事网站语音转写怎么做
  • 一级a做爰片免播放器网站扬中门户网
  • 舆情网站大全模板网站有哪些在哪里下载
  • 新网站关键词怎么优化深圳公司网站推广
  • 新加坡购物网站排名英文版wordpress安装
  • 哪个网站做ppt能赚钱企查查企业信息
  • 学校建设网站的意义wordpress 鸟
  • 一个ip做网站网站建设基础课件
  • 包装设计十大网站连云港网站建设开发
  • 川沙网站建设网站推广服务外包有哪些渠道
  • 哪些网站可以做招商广告手机怎么创网站免费
  • 换物网站为什么做不起来网站开发工具的功能包括
  • 引导式网站君和网站建设
  • 西柏坡门户网站建设规划书自己做照片书的网站
  • 做网站横幅的图片多大公司做自己的网站平台台