蜻蜓
提示 登录 注册 提示 20753/3 09年1月8日 周四 21点10分 站标
从二品:光禄大夫|镇军大将军级别

头像 积分:33820 乐善:291 声望:1496
离线/隐身 无斋主人 家园博客 发短信
注册于:2003-12-12 19:08:38
大类:[科技经济] → 版面:[信息技术]
2547/62 转发回复分页全看树展楼主帖 引用0 送花00收藏:0工具
o几点浅见 [ 无斋主人 ] 于:2005-10-18 14:20:42
Java从没做过,C#/DotNet刚开始涉及时间不长,倒是写了N年的C++,现在还在写。继续班门弄斧。

我个人感觉delegate更自然和强大灵活一些。

delegate相当于函数指针,但又是type safe的。我的理解是等于把函数当作object用,有点像把STL里的Functor抽象出来加了个关键词。

Interface没什么新鲜的,本质上就是abstract class(在C++/COM中是用pure virtual function实现的)。C#这里抄了Java的,Single-inheritance, multiple interfaces。

Interface是通过override interface来实现callback的,caller利用Interface的method callback,而callee则会调用具体的concrete class中被overidden的method(你自己的实现)。delegate是直接调用另一个函数,更简洁明了。

回到概念问题,为了callback,不得不extend interface,而有时候这两者没有IS-A关系,只能说是一种从权。相反delegate更自然,直接给出一个函数当作object使用,并克服了C/C++中函数指针的缺点。

还有一个区别,Interface对于每个具体的concrete class只能有一个实现,而delegate可以有多个,还可以dynamic,所以后者更强大一点。



Highway 荐,
2547/62/0 转发回复分页全看树展楼主帖 引用0 送花00收藏:0工具
引用(0) 请拷贝:
※※※ 相关(回复)帖 ※※※
。。O 班门弄斧一下 (无斋主人;字2376 阅2248 花1
。。。O 说得很不错,鲜花一朵。不过呢, (Highway;字426 阅2123
。。。。O 读完主贴的感觉是意犹未尽。哈哈,老大原来把尾巴藏这儿啦。 (Koala;字354 阅2047
。。。。O delegate只是一个shortcut而已 (魔法胖子;字283 阅2062
。。。。O 几点浅见(无斋主人;字940 阅2547 O
。。。。。O 无斋兄大概是一直用C/C++的,所以觉得 (freemind;字438 阅1155
。。。。。O 这个要和无斋兄商榷一下 (魔法胖子;字347 阅2047
。。。。。。O Was "enclosure" typo of "closure"? (请尽量;字0 阅992
... 共 》62《跟帖
~~~◇—签 名 档—◇~~~

宠辱不惊,闲看庭前花开花落
~~~————~~~
广告 购物分成,帮助网站

点这里自动刷新◆ 或者 完整聊天

专题搜集(范围相对狭小的同类帖)
童年趣事
汶川地震
懒人食谱

Copyright © cchere 西西河 feed 西西河规 版主规范 帮西西河 帮助(FAQ) 版面介绍 发帖特殊效果 网站地图 关于西西河