看了些文章本以为自己明白了一些。可是用的时候还是知道怎么用,可就是想不明白为什么会这样的。委托到底是个什么东西?为什么可以像类一样声明实例呢?请指教。

解决方案 »

  1.   

    给你个委托的例子:public delegate double DoubleOp(double value);
    public class MathOperations
    {
    public static double MultiplyByTwo(double value)
    {
    return 2*value;
    }
    public static double Square(double value)
    {
    return value*value;
    }
    }public class MainEntryPoint
    {
    public static void Execute()
    {
    DoubleOp[] operations={new DoubleOp(MathOperations.MultiplyByTwo),
    new DoubleOp(MathOperations.Square)};
    for(int i=0;i<operations.Length;i++)
    {
    MessageBox.Show(i.ToString());
    System.Windows.Forms.MessageBox.Show(operations[i](111).ToString());
    ProcessAndDisplayNumber(operations[i],2.0);
    ProcessAndDisplayNumber(operations[i],7.94);
    ProcessAndDisplayNumber(operations[i],1.414);
    }
    }// 多点委托
    public static void Execute2()
    {
    DoubleOp objTest = new DoubleOp(MathOperations.MultiplyByTwo);
    objTest += new DoubleOp(MathOperations.Square);
    //以上两行代码等价于如下代码:
    //DoubleOp A = new DoubleOp(MathOperations.MultiplyByTwo);
    //DoubleOp B = new DoubleOp(MathOperations.Square);
    //DoubleOp objTest = A + B;
    //委托可以相加,也可以相减
    //多点委托的最终返回值是最后一个方法的返回值
    MessageBox.Show(objTest(3).ToString());//9
    }
    public static void ProcessAndDisplayNumber(DoubleOp action,double value)
    {
    double result=action(value);
    MessageBox.Show(result.ToString());
    }
    }
      

  2.   

    在C#中没有指针。所以使用了这样一个委托,不过好象跟Java中的事件委托不是一个概念。
      

  3.   

    我心目中的委托是这样的:
    因为想让一个方法当成另一个方法中的参数,直接调用这个方法是不行的。因为程序的执行的时候,IP寄存器里保存的只是一个地址值。而如果一个方法被当成参数调用的话调用者无法知道要执行的方法的地址值,所以要用一个委托,就像C里的函数指针,函数指针保存的就是函数在内存中的地址,而委托的功能可能就是得到那个地址然后传递给方法从而执行程序。
    说的可能不清楚,我也不知道能不能这样解释,请大家帮助一下。
      

  4.   

    http://mech.ncu.edu.cn/99star/article.asp?id=27
    http://mech.ncu.edu.cn/99star/article.asp?id=26
      

  5.   

    TO: 98star
    不行。你给我的二个网址无法显示。
      

  6.   

    回复人: computer3() ( ) 信誉:100  2005-10-25 12:54:44  得分: 0  
     
     
       
    我的理解是:一个类想干一件事,而这件事又不该他干,只好委托给其他的类。
    换句话说,就是给别的类发一个干活的请求,让人家给自己干活。
    这个所谓的请求就是委托(可以看作是C中的函数指针)。
    呵呵  
     
    感觉这样的解释瞒舒服...
      

  7.   

    computer3() 兄理解得深入,回答得精彩.
      

  8.   

    同意  computer3() 的理解,
    也可以这样理解,委托是在调用和被调用者之间建立桥梁..net框架程序设计 事件那章的例子理解为:mailmanager类想执行fax类的FaxMsg方法,但是fax类不让执行,所以mailmanager就定义一个 委托MailMsgEventHandel来执行fax类的FaxMsg方法,
    如果再加上满足一定的条件(文中是有类登记)再执行FaxMsg,就成了具体的委托,既事件.委托是个类,而事件是个类型,事件是委托的实例,我觉得可以这样理解.
      

  9.   

    http://blog.csdn.net/lyb_abiandbel/archive/2005/10/20/510034.aspx