C#中的委托

  【定义】:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
  一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。  在C#中,委托是一种可以把引用存储为函数的类型。
  委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
  委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
  在定义了委托后,就可以声明该委托类型的变量。
  接着将这个变量初始化为与该委托有相同签名的函数引用。
  之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。
 
  在图片合并工具的开发过程中,少不了要分支处理的地方,有些地方分支起来比较麻烦,于是利用了下C#中的委托来处理。关于委托的好处,大道理我说不出来,看下面四段代码,看看你喜欢哪段。注意:这四段代码实现的结果是一样的
public void doSomeThing()
{ 
    int i=0;
    int n=10;
    int state = 0;
    for (i = 0; i < n; i++)
    {
        switch (state)
        { 
            case 0:
                do1();
                break;
            case 1:
                do2();
                break;
            case 2:
                do3();
                break;
        }
    }
}
public void doSomeThing()
{ 
    int i=0;
    int n=10;
    int state = 0;
    switch (state)
    {
        case 0:
            for (i = 0; i < n; i++)
            {
                do1();
            }
            break;
        case 1:
            for (i = 0; i < n; i++)
            {
                do2();
            }
            break;
        case 2:
            for (i = 0; i < n; i++)
            {
                do3();
            }
            break;
    }
}
delegate void dox();
public void doSomeThing()
{ 
    int i=0;
    int n=10;
    int state = 0;
    dox d;
    switch (state)
    {
        case 0:
            d = new dox(do1);
            break;
        case 1:
            d = new dox(do2);
            break;
        case 2:
            d = new dox(do3);
            break;
    }
    for (i = 0; i < n; i++)
    {
        d();
    }
}
delegate void dox();
public void doSomeThing()
{ 
    int i=0;
    int n=10;
    int state = 0;
    dox[] list=new dox[]{
        do1,do2,do3
    };
    dox d = list[state];
    for (i = 0; i < n; i++)
    {
        d();
    }
}
posted @ 2009-07-23 10:41  TGL  阅读(238)  评论(0编辑  收藏  举报