看了些文章本以为自己明白了一些。可是用的时候还是知道怎么用,可就是想不明白为什么会这样的。委托到底是个什么东西?为什么可以像类一样声明实例呢?请指教。
解决方案 »
- invoke 线程 造成的界面假死
- 上位机
- C#怎么写一个自动检测进程,如果进程关闭了,在自动打开这个进程?
- 请给个vs2008下载的地址谢谢
- 很难的问题---事务方面
- 关于label的简单问题(在线等)
- 用.net中水晶报表的人都会出现的问题。怎样去掉主报表上的mainreport tab!
- 怎样实现b/b通信.人数大于1000同时进行的.请列出解决方案 .
- 怪问题,Socket.Send发第三次就自动断开,再连,再发,又是第三次自动断开。是向本机80端口发(开了web服务)
- 求有效的c#关机代码
- c#调用excel
- 高手关于DTE,我们保存我们的工程的时候,.net啊有哪个地方会发生一个动作?
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());
}
}
因为想让一个方法当成另一个方法中的参数,直接调用这个方法是不行的。因为程序的执行的时候,IP寄存器里保存的只是一个地址值。而如果一个方法被当成参数调用的话调用者无法知道要执行的方法的地址值,所以要用一个委托,就像C里的函数指针,函数指针保存的就是函数在内存中的地址,而委托的功能可能就是得到那个地址然后传递给方法从而执行程序。
说的可能不清楚,我也不知道能不能这样解释,请大家帮助一下。
http://mech.ncu.edu.cn/99star/article.asp?id=26
不行。你给我的二个网址无法显示。
我的理解是:一个类想干一件事,而这件事又不该他干,只好委托给其他的类。
换句话说,就是给别的类发一个干活的请求,让人家给自己干活。
这个所谓的请求就是委托(可以看作是C中的函数指针)。
呵呵
感觉这样的解释瞒舒服...
也可以这样理解,委托是在调用和被调用者之间建立桥梁..net框架程序设计 事件那章的例子理解为:mailmanager类想执行fax类的FaxMsg方法,但是fax类不让执行,所以mailmanager就定义一个 委托MailMsgEventHandel来执行fax类的FaxMsg方法,
如果再加上满足一定的条件(文中是有类登记)再执行FaxMsg,就成了具体的委托,既事件.委托是个类,而事件是个类型,事件是委托的实例,我觉得可以这样理解.