关于委托
2012-06-09 23:20
197 查看
在c# in depth中的委托解释:
委托在某种程度上提供了间接地方法。换言之,不需要直接指定一个行为,而是将这个行为用某种方式“包含”在一个对象中。这个对象可以像其它任何对象那样使用。在该对象中,可以执行封装的行为。可以选择将委托对象类型看做只定义了一个方法的接口,将委托的实例看做实现了那个接口的一个对象。
以遗属为例。遗属由一系列的指令组成,比如“付账单,捐款,其余财产留给猫”,一般去世之前写好遗属,然后将它放在一个安全的地方。去世后,由律师执行这些指令。
委托构成:声明委托类型;必须有一个方法包含了要执行的代码;必须创建一个委托实例;必须调用(invoke)委托实例。
delegate vod mydelete(string str);
void func(string str);
mydele=new mydelete(func);
mydele(str);相当于 mydele.invoke(str);
在clr via c#中对委托的揭秘:
internal delegate vod Feedback(int32 value);进行编译后会生成一个完整的类;
如下;
internal class Feedback:System.MulticastDelegate{
//构造器
public Feedback(Object object,IntPtr method);
//这个方法和源码指定的原型一样
public virtual void Invoke(Int32 value);
//以下方法实现了对回调方法的一部回调
public virtual IAsyncResult BeginInvoke(Int32 value,AsyncCallback callback,Object object);
public virtual void EndInvoke(IAsyncResult result);
}
可以用 ildasm.exe查看生成的程序集
改类派生自 System.MulticastDelegate类行中 其中有 _target,_methodPtr,_invocationList 三个属性 非常重要,关系方法的调用及委托链的使用,具体得查看这本书。
在csdn上面有一帖很有意思:http://topic.csdn.net/u/20120602/17/aa2ecdad-c5af-4ce4-888a-89fa8486537c.html
我所理解的委托:
在我们项目中有些用到了E8工作流,发现工作流中用了委托的东西,比如:b/s端的母版页与子叶的关联中,它在母版中定义了很多的委托 ,在需要用的工作流的页面
重要+=new systemhandle(func); func();在母版页中只要用委托调用func()就可以了;这样做的好处就是你在你的子页面中的方法体中处理不同业务都可以,只要需要的参数和返回值类型相同就可以了,这样它的扩展性很高。
经常使用的用户控件,如翻页控件的使用;
还在整理中。。。
委托在某种程度上提供了间接地方法。换言之,不需要直接指定一个行为,而是将这个行为用某种方式“包含”在一个对象中。这个对象可以像其它任何对象那样使用。在该对象中,可以执行封装的行为。可以选择将委托对象类型看做只定义了一个方法的接口,将委托的实例看做实现了那个接口的一个对象。
以遗属为例。遗属由一系列的指令组成,比如“付账单,捐款,其余财产留给猫”,一般去世之前写好遗属,然后将它放在一个安全的地方。去世后,由律师执行这些指令。
委托构成:声明委托类型;必须有一个方法包含了要执行的代码;必须创建一个委托实例;必须调用(invoke)委托实例。
delegate vod mydelete(string str);
void func(string str);
mydele=new mydelete(func);
mydele(str);相当于 mydele.invoke(str);
在clr via c#中对委托的揭秘:
internal delegate vod Feedback(int32 value);进行编译后会生成一个完整的类;
如下;
internal class Feedback:System.MulticastDelegate{
//构造器
public Feedback(Object object,IntPtr method);
//这个方法和源码指定的原型一样
public virtual void Invoke(Int32 value);
//以下方法实现了对回调方法的一部回调
public virtual IAsyncResult BeginInvoke(Int32 value,AsyncCallback callback,Object object);
public virtual void EndInvoke(IAsyncResult result);
}
可以用 ildasm.exe查看生成的程序集
改类派生自 System.MulticastDelegate类行中 其中有 _target,_methodPtr,_invocationList 三个属性 非常重要,关系方法的调用及委托链的使用,具体得查看这本书。
在csdn上面有一帖很有意思:http://topic.csdn.net/u/20120602/17/aa2ecdad-c5af-4ce4-888a-89fa8486537c.html
我所理解的委托:
在我们项目中有些用到了E8工作流,发现工作流中用了委托的东西,比如:b/s端的母版页与子叶的关联中,它在母版中定义了很多的委托 ,在需要用的工作流的页面
重要+=new systemhandle(func); func();在母版页中只要用委托调用func()就可以了;这样做的好处就是你在你的子页面中的方法体中处理不同业务都可以,只要需要的参数和返回值类型相同就可以了,这样它的扩展性很高。
经常使用的用户控件,如翻页控件的使用;
还在整理中。。。
相关文章推荐
- .NET委托:一个关于C#的睡前故事
- 关于委托的精彩解说
- 关于C# 委托(delegate)与事件(event)的用法及事例
- iOS中关于delegate(委托)的使用
- [转]ios中关于delegate (委托)的使用心得
- 关于QTreeView和QStandardModel联合理解,外加显示委托的理解(学习笔记,如有错误还望指出)
- 今日学习:关于C#多线程之一——异步委托
- 关于Files Owner 和委托连接
- 关于C# 委托(delegate)与事件(event)的用法及事例
- 学习之路三:关于运用单线程和委托以及事件自定义Timer类
- 关于委托的精彩解说
- 关于C# 委托的理解
- c#关于委托和事件
- ios中关于delegate(委托)的使用心得
- 关于异步模式和.Net里的委托
- 关于事件与委托的概念性问题
- 一个关于委托、事件、多线程、异步的Demo
- .NET委托:一个关于C#的睡前故事
- 关于委托(转)
- 关于.net委托的一篇妙文