全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#事件实例详解

C#事件实例详解

C#和JAVA有许多相似的地方,设计思想差不多,语法及其相像,均传承自面向对象设计思想,灵感来自C++并取其精华去其“糟粕(二字持保留意见)”,中间语言、解释执行、一次编译、到处执行,出身豪门算得上是表兄弟关系,各自拥有庞大的拥趸,两种语言在发展的道路你追我赶相互借鉴相互学习相互渗透,至于谁的IDE更强大对于一个用了二十年vim编辑器的人来说实在无从评判,强大到让人内牛满面~

    C#语言中关于事件(event)结合代理(delegate)实现对象状态变更时的通知机制,总感觉这种处理有点过于复杂化了,但既然人家这么设计必定有人家的道理,相信并向人家学习而不急于批判和否定才能让自己进步的更快,个人觉得这种处理大概是来自于视窗独有的对各个控件事件集中快速响应的机制吧,这可能也是从事前后端开发关注点的差异,前端重人机交互当然交互的核心就是不确定时间属性和状态的事件,后端重触发每个事件的发生基本都是预定义且流程化构建好的,所以接下来尝试理解和解读一下C#的事件。

    第一步:声明一个代理,这个代理可以是系统的也可以是自定义的。

 public delegate void MyDelegate();                   // 声明无参无返回值代理

  public delegate bool MyDelegate(int k, int v);         // 声明有参有返回值代理

    第二步:创建一个包含该代理事件的对象,对象中调用代理实现事件的处理。

  public class MyArrayList : ArrayList

  {

    public event MyDelegate MyChanged;           // 声明代理事件

    public override void Add(object o)                // 覆盖父类方法

    {

       base.Add(o);                              // 调用父类方法

      OnChanged();                             // 调用事件函数

    }

    protected virtual void OnChanged()

    {

      if (null != MyChanged) MyChanged();        // 代理触发事件

    }

  }

    第三步:创建一个类,将事件和代理绑定到一起,a、类构造时以包含代理事件对象作为入参,b、“+=”运算符实现绑定,c、在代理中传入类成员函数。

 public class MyEvent

  {

    private MyArrayList list;

    public MyEvent(MyArrayList l)

    {

      list = l;

      list.MyChanged += new MyDelegate(ListChanged);    // 绑定事件

    }

    private void ListChanged()                           // 被绑定事件

    {

      System.Console.WriteLine("ListChanged ...");

    }

  }

    第四步:创建含有事件的类的实例,创建含有方法的类的实例。

  public class MyTest

  {

    public static void Main()

    {

      MyEvent me = new MyEvent(new MyArrarList());

      me.Add("object_1");

    }

  }

    仔细研究发现,代理相当于C\C++中的函数指针,但功能更强大,使用更安全,代理实例在创建的时候,代理会把传给它的参数传给绑定的方法,而且代理可以通过“+=”运算符搭载更多的方法,下面是对比C\C++函数指针的用法。

  char* (*pFun)(char*) = NULL;

  pFun = GtCodeUtf8ToGB2312;

  char* pszData = (*pFun)("计算机");

 

  char* GtCodeUtf8ToGB2312(char* pszUtf8)

  {

    char* pszGB2312 = NULL;

    ......

    return pszGB2312;

  }

    再举两个C语言中典型的函数指针的例子:

    例一:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);其中第三个参数是一个函数地址,指向被创建线程的核心处理函数。

    例二:void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));其中最后一个参数也是一个函数地址,指向两个元素对比计算函数。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C#事件  # C#事件详解  # 绑定  # 创建一个  # 更强大  # 的人  # 返回值  # 都是  # 运算符  # 后端  # 是一个  # 设计思想  # 让人  # 你追我赶  # 拥趸  # 两种  # 是从  # 而不  # 有许多  # 可以通过  # 用了  # 希望能 


相关文章: 电商网站制作公司有哪些,1688网是什么意思?  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何高效完成自助建站业务培训?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速搭建个人网站并优化SEO?  如何选择高效可靠的多用户建站源码资源?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  家具网站制作软件,家具厂怎么跑业务?  教学论文网站制作软件有哪些,写论文用什么软件 ?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  网站制作公司排行榜,抖音怎样做个人官方网站  如何制作一个表白网站视频,关于勇敢表白的小标题?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站主机是否属于云主机类型?  如何快速使用云服务器搭建个人网站?  如何选择适合PHP云建站的开源框架?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何选择高效稳定的ISP建站解决方案?  如何有效防御Web建站篡改攻击?  h5在线制作网站电脑版下载,h5网页制作软件?  音响网站制作视频教程,隆霸音响官方网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  网站网页制作专业公司,怎样制作自己的网页?  定制建站流程步骤详解:一站式方案设计与开发指南  建站之星如何优化SEO以实现高效排名?  实例解析angularjs的filter过滤器  深圳网站制作培训,深圳哪些招聘网站比较好?  香港网站服务器数量如何影响SEO优化效果?  建站主机选哪种环境更利于SEO优化?  七夕网站制作视频,七夕大促活动怎么报名?  如何在香港服务器上快速搭建免备案网站?  如何通过FTP服务器快速搭建网站?  建站之星后台密码遗忘?如何快速找回?  广州商城建站系统开发成本与周期如何控制?  建站之星代理平台如何选择最佳方案?  如何快速生成橙子建站落地页链接?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  建站之星CMS五站合一模板配置与SEO优化指南  淘宝制作网站有哪些,淘宝网官网主页?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  已有域名如何免费搭建网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  c# 在ASP.NET Core中管理和取消后台任务  如何在腾讯云免费申请建站?  重庆市网站制作公司,重庆招聘网站哪个好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。