为什么要使用委托,它与函数嵌套有什么区别。
解决方案 »
- c#数组声明
- Web服务器问题
- c# 如何调用出windows新建任务的那个窗口???
- 关于自定义绘制里ListBox的2个问题
- 为什么 用CheckedListBox1.CheckedItems[i].ToString() 没有获得值 打印出来的是System.Data.DataRowView
- C#调试问题
- 把一个EXCEL的SHEET追加到另一个EXCEL文件的问题!
- 窗体数据绑定问题
- Socket入门问题(二):主线程与子线程间如何传递一个对象?
- 关于在ASP.NET中使用n-tie结构的问题,请高手进来:
- 求大哥们一个正则算法。把a标签一个属性给弄出来。
- CSDN-CSDN社区-.NET技术-C#
嵌套:在方法内调用自己
区别很明显参考http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
有时要取函数的地址,异步啊,回调啊,Hook啊
C/C++中函数名同时也是地址。
Delphi中也有过程/函数类型
连VB都能AddressOf取函数/子过程地址委托是“更安全的”方法指针。
我想再问一下,如果我要实现如下功能,该怎么办?
1)func(30, 20)// 先把函数的参数都配置完成,但是此时并不调用func这个函数。
2)wakeup(10, 80) // i.该函数的参数定义与func的参数不同,也就是10,80并没有传到func中。
// ii.当wakeup被调用的时候,func(30, 20)也被调用。
** 也就是说,func的参数是在wakeup函数外被配置的。**
不太明白你这么个简单的问题,非何非要去想用这么一个复杂的处理方法,如果两个函数都已经存在于.net的DLL中,而且,wakeup内部调用了func话,你想在wakeup中修改func的参数,那别想了,几乎没办法实现.
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,用两个参数,就可以了.省得输十来个参数
为什么要有委托?OO中万物皆东西(object),函数指针自然也可以。委托隐藏了函数指针(避免野指针问题),符合C#语言中避免指针的弱约束,更是提供了一些实用性的操作,也提供了设计模式中策略模式的典型实现,还提供了事件驱动开发的基础模型。为什么要有函数指针?指针可以间接地指向一段代码为什么要有指针?C语言的附产物,为了间接地指向一块内存(代码或数据)的地址为什么要有函数?为了共享一段代码,节省内存个人愚解。
(声明:静态delegate除外)
这个实际上AOP编程中有关配制注入和反转控制的描述
{
bb(123);
}function bb(id)
{
alert(id);
}结果自然是123