A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐艳勇 中级黑马   /  2012-10-13 13:44  /  1540 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是委托
  首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
如何使用委托
  在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。
声明,如:
1
namespace Vczx.ProCSharp.Exc
2 {
3 delegate
double MathsOp( double x );
4 //class defination here
5 }

  这就声明了一个委托,意义:任何一个返回值为double,且只有一个形参为double的函数,都可以用这个委托来调用。
  其实,委托的声明也可以在类的里面,甚至是任何一个可以声明类的地方。
  实例化:
  首先我们要先有一个满足委托声明的方法,假设一个返回一个数的2倍的方法:

1class MathsOperations
2{
3 public
static
double MultiplyBy2( double value )
4 {
5 return value *
2;
6 }
7}

  有了这样一个方法,我们就可以实例化一个委托了:
MathsOp operation = new MathsOp( MathsOperations.MultiplyBy2 );
  在实例化一个委托时,要给它一个参数,这个参数就是委托执行的方法,它可以是静态方法,也可以是实例方法(这一点有别于函数指针,函数指针只能调用静态方法),如:
MathsOp operation = new MathsOp( new Class1().Method1 );
在实例化完一个委托之后,就可以用这个委托来调用方法了:
double result = operation( 1.23 );

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 刘俊红 于 2012-10-13 17:46 编辑

之所以很多人拎不清委托,其中的一个原因就是混淆了以下两个东西。【他俩被统称委托后引起了相当多的麻烦】
1)委托类型。 delegate  double MathsOp( double x );  这句话定义了一个委托类型 MathsOp
2)委托实例。MathsOp operation = new MathsOp( new Class1().Method1 );  这条语句后半截用new声明了一个委托实例,再赋值给了委托变量 operation。

委托类型作为C#中的一等公民,和类类型一样,也是引用类型。 在想委托的特殊之前,我们可以想想委托作为一个普通引用类型应该具有的东西!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马