主题:【原创】JAVA和C#,武当和少林之争! -- Highway
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,所以后者更强大一点。
- 相关回复 上下关系8
压缩 3 层
😁说得很不错,鲜花一朵。不过呢, 1 Highway 字426 2005-10-18 13:36:17
😜读完主贴的感觉是意犹未尽。哈哈,老大原来把尾巴藏这儿啦。 Koala 字354 2005-10-18 22:40:31
delegate只是一个shortcut而已 1 魔法胖子 字283 2005-10-18 16:46:20
几点浅见
无斋兄大概是一直用C/C++的,所以觉得 1 freemind 字438 2005-10-18 22:14:13
这个要和无斋兄商榷一下 1 魔法胖子 字347 2005-10-18 16:53:29
Was "enclosure" typo of "closure"? 请尽量 字0 2005-10-19 01:24:00
Yes, "closure" 魔法胖子 字73 2005-10-19 10:11:45