关闭

学习C#的委托时,有点想法和大家共享

823人阅读 评论(0) 收藏 举报
委托[或者叫做回调、监听]模式,本质是一个执行代码的晚绑定方式,与虚方法的多态类似,但是区别在于委托的执行代码绑定在消息数据上,而虚拟多态是绑定在对象数据上,消息数据和对象数据只是视角的区别,依赖于你的对象设计。
实现一个委托模式分为四个部分,(涉及至少两个对象实体:消息源和消息目的):委托声明(消息源和消息目的都可见),建立委托实例和委托点(消息源可见),实现委托(消息目的可见),委托绑定(消息目的可见)。
1, 委托声明
在C#中,Public delegate int DataProcessingDelegate( int );
在C中,typedef int (*)(int) DataProcessingDelegate;
在C++中,用泛型实现,template class DataProcessingDelegate < class T > {private T t; DataProcessingDelegate(class T p):t(p); int DataProcessing (class T *, int);};
在Java 中,用接口实现,interface DataProcessDelegate { int DataProcessing (int);};
2, 建立委托实例和委托点
在C#中,DataProcessingDelegate dpd; …; if(null !=dpd) {dpd(365);};
在C中, DataProcessingDelegate dpd=0; …; if(0 !=dpd) {*dpd(365);};
在C++中,用泛型实现,DataProcessingDelegate < Object > *dpd; …; if(0 !=dpd) {dpd -> DataProcessing(Object *, 365) ;};
在Java 中,用接口实现,interface DataProcessDelegate dpd; …;…; if(null !=dpd) {dpd. DataProcessing(365);};
3, 实现委托
在C#中,int DataProcessingDelegateMethod (int) {…};
在C中,int DataProcessingDelegateMethod (int) {…};
在C++中,用泛型实现,class MyDataProcess { int DataProcessingDelegateMethod (Object * p,int) {…;MyDataProcess * mdp = dynamic_cast < MyDataProcess * > (p);… };
在Java 中,通常用匿名类实现,…= new DataProcessDelegate { int DataProcessing (int) {…};};
4, 委托绑定
在C#中,dpd = new DataProcessingDelegate(DataProcessingDelegateMethod);
在C中,dpd = DataProcessingDelegateMethod;
在C++中,用泛型实现,dpd = new DataProcessingDelegate < Object > (myDataProcess);
在Java 中,dpd= new DataProcessDelegate …;
在Java 通常使用的监听模式中,一般会实现一个addXXXListener的方法。

好长时间没写程序了,仓促而就,错误难免,请高手指正。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45157次
    • 积分:768
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:6篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论