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

委托[或者叫做回调、监听]模式,本质是一个执行代码的晚绑定方式,与虚方法的多态类似,但是区别在于委托的执行代码绑定在消息数据上,而虚拟多态是绑定在对象数据上,消息数据和对象数据只是视角的区别,依赖于你的对象设计。
实现一个委托模式分为四个部分,(涉及至少两个对象实体:消息源和消息目的):委托声明(消息源和消息目的都可见),建立委托实例和委托点(消息源可见),实现委托(消息目的可见),委托绑定(消息目的可见)。
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值