五千年(敝帚自珍)

主题:【原创】JAVA和C#,武当和少林之争! -- Highway

共:💬137 🌺299 🌵10
全看分页树展 · 主题 跟帖
家园 几点浅见

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,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河