为什么要使用委托,它与函数嵌套有什么区别。

解决方案 »

  1.   

    委托:将方法作为方法的参数 进行调用 
    嵌套:在方法内调用自己
    区别很明显参考http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
      

  2.   

      嵌套函数,就是指在某些情况下,您可能需要将某函数作为另一函数的参数使用,这一函数就是嵌套函数。例如图1中所示的公式使用了嵌套的 AVERAGE 函数,并将结果与 50 相比较。这个公式的含义是:如果单元格F2到F5的平均值大于50,则求F2到F5的和,否则显示数值0。
      

  3.   

    指向函数的指针,我个人是这么理解的。
    有时要取函数的地址,异步啊,回调啊,Hook啊
    C/C++中函数名同时也是地址。
    Delphi中也有过程/函数类型
    连VB都能AddressOf取函数/子过程地址委托是“更安全的”方法指针。
      

  4.   

    多谢各位,给了我那么多答案。
    我想再问一下,如果我要实现如下功能,该怎么办?
    1)func(30, 20)// 先把函数的参数都配置完成,但是此时并不调用func这个函数。
    2)wakeup(10, 80) // i.该函数的参数定义与func的参数不同,也就是10,80并没有传到func中。
                          // ii.当wakeup被调用的时候,func(30, 20)也被调用。 
    ** 也就是说,func的参数是在wakeup函数外被配置的。**
      

  5.   


    不太明白你这么个简单的问题,非何非要去想用这么一个复杂的处理方法,如果两个函数都已经存在于.net的DLL中,而且,wakeup内部调用了func话,你想在wakeup中修改func的参数,那别想了,几乎没办法实现.
      

  6.   

    那可以把参数封装为struct或class,一个就够了或用另一个函数包装参数列表过长的函数比如:
     public static void SaveExcel(Excel.Workbook workBook, string fileName)
            {
                object objMissing = System.Reflection.Missing.Value;
                workBook.SaveAs(fileName , objMissing, objMissing, objMissing, objMissing, objMissing, Excel.XlSaveAsAccessMode.xlNoChange, objMissing,
                    objMissing, objMissing, objMissing);
            }
    需要调用workBook.SaveAs方法时,直接调用SaveExcel,用两个参数,就可以了.省得输十来个参数
      

  7.   

    .net学java,努力打造一个纯面向对象环境,而不是像c++那样的不清不楚的混合环境。最起码地标志就是:对象就是独立的对象,要标记方法那么就是使用方法对象,没有什么内存指针这种纠结概念。
      

  8.   

    世界上不是只有一个c++语言。而.net不是语言,是个虚拟机平台。
      

  9.   

    把问题稍微回溯以下
    为什么要有委托?OO中万物皆东西(object),函数指针自然也可以。委托隐藏了函数指针(避免野指针问题),符合C#语言中避免指针的弱约束,更是提供了一些实用性的操作,也提供了设计模式中策略模式的典型实现,还提供了事件驱动开发的基础模型。为什么要有函数指针?指针可以间接地指向一段代码为什么要有指针?C语言的附产物,为了间接地指向一块内存(代码或数据)的地址为什么要有函数?为了共享一段代码,节省内存个人愚解。
      

  10.   

    这个问题好像要扯到了为什么要用oo,看着一大堆class,我开始浮想联翩了。
      

  11.   

    委托可不是函数指针,如果你把一个delegate传给一个DLL的话,DllImport时有时有这种需求,你弄个GC.Collect试试.保证让你非常爽!
    (声明:静态delegate除外)
      

  12.   

    当年,.Net出来前或后不到一年的时间内,微软就通过各种媒体反复的强调了,.Net中所有的东西全是类,还真全是类,你弄个函数指针(delegate),只要你敢GC.Collect,除非某类还用它,否则保证给你析构掉
      

  13.   


    这个实际上AOP编程中有关配制注入和反转控制的描述
      

  14.   

    委托就是可以把函数名当做单数传递给函数,在js中最为常用function aa(bb)
    {
       bb(123);
    }function bb(id)
    {
      alert(id);
    }结果自然是123