C#基础常识

对于C#的一些基础知识,现总结如下:


1.事件的理解:

事件是可以被控件识别的操作,同时也是一个或多个方法的代理,当某个操作发生时,代理会自动执行,从而代理的相关方法也会自动执行。

事件是类和对象向外界发出的消息,事件的执行是通过事件委托的方式,调用我们所准备好的处理方法。要响应某些事件并针对某些事件执行我们指定的方法,需要做到以下几步:

  • 声明委托、事件
  • 添加事件的触发方法,也就是通知接受者方法
  • 添加事件引发方法
  • 接受者处本地化响应方法
  • 接受者订阅事件


"在发生其他类或对象关注的事情时,类或对象可以通过事件通知他们。发送(或引发)事件的类称为"发行者",接受(或处理)事件的类称为"订户"。"

上面这句话描述了事件的最本质功能,用于底层通知上层。正常的架构设计都是分层结构,而分层结构有一点很重要的就是底层对于上层的无知,当初这样设计是为了解耦,为了更好的面向对象,但是带来的问题是如何解决自下而上的信息流。因为自上而下的调用,我们通过接口就可以搞定一切了,上层可以看到下层提供的服务接口,那么正常的调用可以保证一路向下,底层调用中层提供的服务接口,中层的服务接口的实现中调用了底层的服务接口,这样感觉很是完美的设计模式。每一层都不再依赖彼此,隐藏了实现细节。但是现在遇到一个最简单的问题:如果需要底层来触发上层的行为,如何实现。很多程序员告诉我这个简单,轮询啊,底层不断轮询这一个事情的发生状况,如果发生了则启动一个线程专门去处理这个事情。这种解决方案只需要在底层多开出一个服务接口,该服务接口就是表示目前发生了什么事情,然后上层定时查看该接口,如果发生则采取相应操作。当然该种解决方案也是一种解决途径,但是估计你也觉得不好,第一无法实时,因为轮询,那么必定存在一个时差问题,也就是常说的响应时间问题。还有就是单独的轮询线程需要空间与时间的消耗。最让人郁闷还在于这个对于时空的消耗竟然与响应时间是反相关的,总之你想响应时间短,那么就意味着你不得不浪费大量时空,反之亦然。当然此种方法还要解决多线程冲突的问题,涉及到多线程冲突,锁解锁的问题,那么我觉得就不怕你的逻辑能力有多强,耐心有多大,随着项目规模的变大,线程的变多,你大脑崩溃那是早晚的事情。

此处我们引入事件模式。

先来看看事件的特征:

  • 发行者确定何时引发事件,订户确定执行何种操作来响应该事件
  • 一个事件可以有多个订户。一个订户可处理来自多个发行者的多个事件
  • 没有订户的事件永远不会被调用
  • 事件通常用于通知用户操作
  • 如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序
  • 支持异步调用
  • 可以利用事件同步线程
  • .NET Framework 类库中,事件是基于 EventHandler 委托和 EventArgs 基类的


2."委托是一种安全地封装方法的类型,它与 C C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。"此句话中"委托是面向对象的"需要额外注意。委托的本质就是一个类,所以实例化的一个委托就是一个对象,具有对象的一切特征。  

委托基本概念就是指针、面向对象。理解这两点,委托也就基本掌握了。


3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值