C#委托之个人理解
2014-03-24 18:07
253 查看
C#委托之个人理解
什么是委托 首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
如何使用委托 在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。
声明,如:
namespace Vczx.ProCSharp.Exc
{
delegatedouble MathsOp( double x );
//class defination here
}
这就声明了一个委托,意义:任何一个返回值为double,且只有一个形参为double的函数,都可以用这个委托来调用。 注意:委托的声明位置在namespace里面,类的外面。其实,委托的声明也可以在类的里面,甚至是任何一个可以声明类的地方。 实例化: 首先我们要先有一个满足委托声明的方法,假设一个返回一个数的2倍的方法:
class MathsOperations
{
publicstaticdouble MultiplyBy2( double value )
{
delegatedouble MathsOp( double x );
class Start
{
publicclass MyDelegate
{
publicstaticvoid MultiplyBy2( double value )
{
double result = value *2;
Console.WriteLine( "Multiplying by 2: {0} gives {1}", value, result );
}
publicstaticvoid Squre( double value )
{
double result = value * value;
Console.WriteLine( "Squaring: {0} gives {1}", value, result );
}
}
delegatevoid MathsOp( double x );
class Start
{
[STAThread]
staticvoid Main(string[] args)
{
MathsOp operation =new MathsOp( MyDelegate.MultiplyBy2 );
operation +=new MathsOp( MyDelegate.Squre );
double x =1.23;
operation( x );
operation -=new MathsOp( MyDelegate.MultiplyBy2 );
operation( x );
Console.Read();
}
}
}
输出: Multiplying by 2: 1.23 gives 2.46 Squaring: 1.23 gives 1.5129 Squaring: 1.23 gives 1.5129
注意,多路广播委托声明时必须返回void,否则返回值不知道应该送回什么地方。对此,我做了一个测试:如果不将委托的声明返回void,则返回值返回的是最后一个链入委托链的方法的返回值,编译不会出错。
为什么要用委托 使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
什么是委托 首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
如何使用委托 在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。
声明,如:
namespace Vczx.ProCSharp.Exc
{
delegatedouble MathsOp( double x );
//class defination here
}
这就声明了一个委托,意义:任何一个返回值为double,且只有一个形参为double的函数,都可以用这个委托来调用。 注意:委托的声明位置在namespace里面,类的外面。其实,委托的声明也可以在类的里面,甚至是任何一个可以声明类的地方。 实例化: 首先我们要先有一个满足委托声明的方法,假设一个返回一个数的2倍的方法:
class MathsOperations
{
publicstaticdouble MultiplyBy2( double value )
{
delegatedouble MathsOp( double x );
class Start
{
publicclass MyDelegate
{
publicstaticvoid MultiplyBy2( double value )
{
double result = value *2;
Console.WriteLine( "Multiplying by 2: {0} gives {1}", value, result );
}
publicstaticvoid Squre( double value )
{
double result = value * value;
Console.WriteLine( "Squaring: {0} gives {1}", value, result );
}
}
delegatevoid MathsOp( double x );
class Start
{
[STAThread]
staticvoid Main(string[] args)
{
MathsOp operation =new MathsOp( MyDelegate.MultiplyBy2 );
operation +=new MathsOp( MyDelegate.Squre );
double x =1.23;
operation( x );
operation -=new MathsOp( MyDelegate.MultiplyBy2 );
operation( x );
Console.Read();
}
}
}
输出: Multiplying by 2: 1.23 gives 2.46 Squaring: 1.23 gives 1.5129 Squaring: 1.23 gives 1.5129
注意,多路广播委托声明时必须返回void,否则返回值不知道应该送回什么地方。对此,我做了一个测试:如果不将委托的声明返回void,则返回值返回的是最后一个链入委托链的方法的返回值,编译不会出错。
为什么要用委托 使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
相关文章推荐
- C#委托之个人理解
- C#委托之个人理解 (转)
- C#委托之个人理解
- C#委托理解(个人观点)
- C#委托之个人理解
- C#委托之个人理解
- 个人对于JAVA异常的理解
- C#委托,事件理解入门 (译稿)
- 斜率DP个人理解
- iterator个人理解
- 差分约束系统个人理解
- HTTP的请求个人理解汇总
- j2ee三大框架个人理解
- JMS学习的个人理解笔记
- 元元模型(Meta Object Facility)的个人理解
- 领域驱动设计(DDD)部分核心概念的个人理解
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 【封装·继承·多态】个人通俗理解
- sorted as raw strings, not alphanumerics 的个人理解?
- 对C#委托和事件委托的理解