委托

委托的定义:使用委托在委托对象的内部封装对某个方法的引用。委托是类型安全的,可靠的托管对象。相当于函数指针。委托总是指向一个有效的对象,并且不会破坏其他对象所在的内存。

 

使用委托的场景:

 

声明委托 - 实例化委托 - 调用委托

  //声明委托
delegate void MyDelegate1(string s);

public class MyClass
{
public static void Hello(string s)
{
// do something1
}
public void AMethod(string s)
{
// do something2
}
}
   // 实例化委托到静态方法
MyDelegate1 a = new MyDelegate1(MyClass.Hello);

// 实例化委托到对象p的 Amethod 的实例方法
MyClass p = new MyClass();
MyDelegate1 b = new MyDelegate1(p.AMethod);

// 调用委托
a("Jacky");
b("Zhong");

 

多路广播委托

  //声明委托
delegate void MyDelegate2();

public class FOO
{
public void Bar()
{
//do something
}
}
 FOO aFoo1 = new FOO();
FOO aFoo2 = new FOO();
MyDelegate2 a, b, c, d;
a = new MyDelegate2(aFoo1.Bar);
b = new MyDelegate2(aFoo2.Bar);
// 将委托a和b的组合赋给委托c
c= (MyDelegate2) Delegate.Combine(a,b);
// 从c中删除a的结果赋给d
d = (MyDelegate2)Delegate.Remove(c, a);

// 迭代c 的调用列表
// 并调用除aFood1目标外的所有委托
Delegate[] DeleteList = c.GetInvocationList();
for (int i = 0; i < DeleteList.Length; i++)
{
if (DeleteList[i].Target != aFoo1)
{
((MyDelegate2)DeleteList[i])();
}
}






posted @ 2012-01-30 23:28  Jacky IT  阅读(306)  评论(0)    收藏  举报