委托
来源:互联网 发布:知乎日报 api 编辑:程序博客网 时间:2024/05/16 07:31
我们先像我们常规的去编写一段代码(我们就从这代码也能体现出委托的作用):
//------------------先定义一个委托类型-------------------------------
Delegate void DgSayHelo(string name);
//-----------------------再声明一个委托类型的对象-----------------------------------------------
DgSayHelo Sayhello=null;
//---------------------然后定义一些方法--------------------------------------------------
Void US(string name)
{
Console.Write("Hello"+name);
}
Void C(string name)
{
Console.Write("您好"+name);
}
Void J(string name)
{
Console.Write("OHaU"+name);
}
//-------------------------在委托里注册以上方法-----------------------------------------------------
Sayhello=new DgSayHelo (US);
Sayhello+=C;
Sayhello+=J;
//-------------------------------现在我们来执行委托----------------------------
Sayhello("Ms.Wen");
在这里我们不讨论出现了什么;
我只想说这些语法的来路(也就是所谓的原理)
当我们的声明一个委托时候
Delegate void DgSayHelo(string name);
那我们有问题了 ?
delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。------摘自別文;
那么当编译器遇到关键字的时候为我做了什么呢; 当然为真实我们应该去用 反汇编
以上图所示:
我们看到的是
1.生成一个类: 并继承了MultcastDelegate
2. 构造函数;
3EndInvoke() ,BeginInvoke(),Invoke()等方法
这样也就说明了、
class DGHello:System.MulticastDelegate
{
public DelegateForFun();
void Invoke(string value);
IAsyncResult BeginInvoke(string value,AsyncCallback callback,Object object);
void EndInvoke(IAsyncResult result);
}
下面我们再来看其中MultcastDelegate这个类
借助.Net Reflector工具来查看类库中的 MulticastDelegate 类
public abstract class MulticastDelegate : Delegate
由此我们可以看出继承关系:DGSayHi –> MulticastDelegate –> Delegate
MulticastDelegate类中有3个重要的成员,其中两个继承自 Delegate :
a.三者的作用:
_methodPtr 里保存的就是 方法指针。
_target 里用来保存方法所在的对象。
_invocationList 其实使用时是个object数组,在注册多个方法时,其他方法就保存在此成员中,而它也就是 委托链 的关键容器。
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- C# winform对话框用法大全
- word文件中的图形的删除
- Oracle rdba和 dba 说明
- Corpus-based approach的好处
- 入了解canvas标签(5)——变形
- 委托
- 今天很不好
- 深入了解canvas标签(6)——组合
- Servlet 过滤器
- Oracle 数据文件 reuse 属性 说明
- 使用CSS3 @font-face实现个性化字体
- 【转】关于C#值类型,引用类型,值传递,引用传递
- 程序员面试题精选100题(02)-设计包含min函数的栈
- 临时表 DML 产生redo 问题说明