CSDN博客

img sofoo

C#学习笔记-delegate 委托

发表于2004/11/1 16:18:00  2335人阅读

Delegate:简单的可以理解为动词名词化。
委托是一个函数的引用,拥有和函数相同的返回值类型,
而委托实际上是一个类,他能够持有对某种方法的引用,该类拥有一个签名,只能应用与其签名相匹配的方法。
正因为一个委托是一个实例化的类(一个对象),所以委托是受控制和安全的。
实现一个委托:
1:声明delegate对象,与想传递给他的方法具有相同的返回值类型
2:创建delegate对象,将想要引用的函数做为参数传入
3:在实现异步调用的地方,通过创建的委托对象(一个委托类的实例)来调用方法

应用
当 Win32 函数需要返回多项数据时,通常都是通过回调机制来实现的。开发人员将函数指针传递给函数,然后针对每一项调用开发人员的函数。
在 C# 中没有函数指针,而是使用“委托”,在调用 Win32 函数时使用委托来代替函数指针。

委托调用
方法一:创建委托对象后,将委托对象传递给调用委托的其他代码(如一个方法)。通过委托对象的名称(后面跟着要传递给委托的参数)调用委托对象
eg:

    //声明一个委托:
public class DelegateClass
{
       public delegate void DelegateA(String s);
      private void FA(String s)
      {    
           MessageBox.Show("hi "+ s);
      }
      private void FB(String s)
      {
           MessageBox.Show("88 " + s);
      }
      private void FC(String s)
      {
           MessageBox.Show("this is " + s);
      }
      public void DoDelegateA(DelegateA da,String info)
      {
           da(info);
      }
}

调用:
实例化类:
DelegateClass dc = new DelegateClass();
dc.DoDelegateA(new DelegateA(FA),“haha“);//将FA的引用传递给一个DelegateA委托实例
dc.DoDelegateA(new DelegateA(FB),“hoho“);
输出消息框显示分别为:
hi haha
88 hoho

方法二:实例化委托对象,直接传递参数给委托对象调用
还是比如上面的类中
DelegateA delegateA = new DelegateA(FC);
delegateA(“heihei“);

补充中...

阅读全文
0 0

相关文章推荐

img
取 消
img