学习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的方法。

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

阅读更多
个人分类: 胡思乱想
上一篇精通Hibernate 读后
下一篇Internet心得偶记
想对作者说点什么? 我来说一句

C#委托方法的学习

2017年11月28日 36KB 下载

没有更多推荐了,返回首页

关闭
关闭