西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发C#.NET → 对C#中的委托、事件即delegate和event的一些个人心得

对C#中的委托、事件即delegate和event的一些个人心得

相关软件相关文章发表评论 来源:本站整理时间:2010/11/24 8:45:25字体大小:A-A+

作者:佚名点击:108次评论:0次标签: 委托 事件 delegate event 心得

  • 类型:塔防游戏大小:34.5M语言:中文 评分:10.0
  • 标签:
立即下载
在C#中,所有的Type都是从Object派生而来,也就是说一切Type皆Object。如果,再抽象一个层次,可以把函数也看成Object,可以用函数名+参数+返回值来标识这个函数对象。

把函数看成Object后,自然可以把函数作为成员、变量来用,甚至可以作为另一个函数的参数值、返回值!
在C/C++中,用函数指针来实现这个功能。在C#中,为了类型安全,回避了指针。幸运的是,在C#中,有在语义上等价于函数指针的delegate类型。
一个delegate实例可以引用一个函数。一旦把一个函数赋值给一个delegate,该delegate看起来就像是那个函数的替身。
由此可见,不同语言仅仅用不同的语法阐述了相同的思想!
《重构》一书中,有"封装字段"这个重构,这是一个非常简单、非常朴素、一点都不花哨的重构。但是,背后的思想非常深厚、深远、深邃。
在C#中有Property来实现这个重构。没有它的话,我们可能要多写几行GetXXX()、SetXXX()了。
如果,那个Field不是普通的字段,恰恰是个函数字段(即delegate实例)咋办?难道函数字段就能暴露了吗?!
既然,你已经接受了它,就要好好对待它,千万别虐待它!
同样,在C#中有event来实现。没有它的话,我们就又要多写几行AddXXX()、RemoveXXX()了!
当你写下:

public event EventHandler MyEvent;

就相当于,写了:
private EventHandler _myEvent;
public event EventHandler MyEvent{ add { lock (this) { _myEvent += value;
} } remove { lock (this) { _myEvent -= value;
} }}

是不是,与Property有异曲同工之效?!
相信,大家对event存在性的疑虑已经消除!
另外,很多人疑惑"为啥只有+=、-=,而没有="。
程序员很像木匠、瓦匠、漆匠、铁匠……,都是靠手艺吃饭的。在长期的劳动中,有些善于思考师傅就总结出一些经验。《重构》一书,就是马师傅总结出来的。他认为,要"封装集合",因为有好处!
假设,event支持=,如果一个年少无知的client,到你那里=了一下,你好不容易挂到的2个太阳3个月亮1个星星就没了。
    魔兽塔防地图
    (300)魔兽塔防地图
    塔防,即炮塔防御的简称,也称。塔防受众很广,游戏模式简单而可玩性强,是智力和策略的比拼。当塔防与这两种游戏类型融合在一起的话,游戏就会变得更好玩,同时也很休闲。小编在这里为大家搜集整理了许多魔兽争霸塔防地图,欢迎感兴趣的玩家们前来下载。...更多>>
    塔防游戏
    (70)塔防游戏
    西西游戏网提供最新最热门的塔防游戏,塔防游戏顾名思义就是炮塔防守游戏,玩家需要建造炮塔轰炸一些进攻的敌人保卫家园,塔防游戏操作都很简单,就是在最合理的位置放置炮塔,无需其他的操作,可能有的塔防游戏会添加一些技能,但是也没什么难度的哦.热门游戏保卫萝卜兽人必须死炮塔防御塔防三国志等等,太多了。...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)