C#的委托 delegate
2012-12-03 21:26
399 查看
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
也就是说委托定义了某一类具有特定参数类型和返回类型的方法。
委托在c#中最好看作是对象的一种新类型。当要把方法传送给其他方法时,需要使用它们。
一般我们作为参数的都是数据,而委托是应用在当要传递方法时。主要的应用如下:
1、启动线程
2、通用库类
3、事件
如果要传递方法,就必须把方法的细节包装在一种新类型的对象中,即委托。
定义委托的语法如下:
delegatevoidVoidOperation(uintX);
定义了一个委托VoidOperation,并指定该委托的每个实例都包含一个方法的细节,该方法带有一个Uint参数,并返回void。在定义委托时,必须给出它所代表的方法的全部细节。(委托括号里的X指它所代表的方法的参数)
创建委托的实例(也称为委托):
如
privatedelegatestringGetAString();//定义委托
intx=40;
GetAStringAmethod=newGetAString(x.ToString);//实例化委托即使委托表示整型变量X的ToString()方法。
在C#中,委托在语法上总是带有一个参数构造函数,这个参数就是委托引用的方法。
方法的特征要匹配于委托的特征。如参数、返回类型等。
如何把委托传递给另一个方法:
eg.1
定义一个MathOperations类,带2个静态方法,对double类型的参数执行两个操作
也就是说委托定义了某一类具有特定参数类型和返回类型的方法。
委托在c#中最好看作是对象的一种新类型。当要把方法传送给其他方法时,需要使用它们。
一般我们作为参数的都是数据,而委托是应用在当要传递方法时。主要的应用如下:
1、启动线程
2、通用库类
3、事件
如果要传递方法,就必须把方法的细节包装在一种新类型的对象中,即委托。
定义委托的语法如下:
delegatevoidVoidOperation(uintX);
定义了一个委托VoidOperation,并指定该委托的每个实例都包含一个方法的细节,该方法带有一个Uint参数,并返回void。在定义委托时,必须给出它所代表的方法的全部细节。(委托括号里的X指它所代表的方法的参数)
创建委托的实例(也称为委托):
如
privatedelegatestringGetAString();//定义委托
intx=40;
GetAStringAmethod=newGetAString(x.ToString);//实例化委托即使委托表示整型变量X的ToString()方法。
在C#中,委托在语法上总是带有一个参数构造函数,这个参数就是委托引用的方法。
方法的特征要匹配于委托的特征。如参数、返回类型等。
如何把委托传递给另一个方法:
eg.1
定义一个MathOperations类,带2个静态方法,对double类型的参数执行两个操作
classMathOperations { publicstaticdoubleMultiplyByTwo(doublevalue) {
returnvalue*2; }
publicstaticdoubleSquare(doublevalue)
{
returnvalue*value;
} }
调用方法:
delegatedouble(返回类型)DoubleOp(doublex(所表示的方法的参数));//定义委托
DoubleOp[]operations=
{
newDoubleOp(MathOperations.MultiplyByTwo),//调用上述MathOperations类的静态方法
newDoubleOp(MathOperations.Square)
}//定义委托数组
for(inti=0;i<operations.Length;i++)
{
ProcessAndDisplayNumber(operations[i],2.0);
ProcessAndDisplayNumber(operations[i],3.14);//每个operations[i]代表一个委托,即该委托所表示的方法。
}
staticvoidProcessAndDisplayNumber(DoubleOpaction,doublevalue)
{
doubleresult=action(value);//action(value)即表示调用operations[i]所表示的方法,对value进行操作
}
可以把方法组合到一个数组中,这样就可以在循环中调用不同的方法了。
相关文章推荐
- C# delegate 委托 event 事件
- C# 委托 delegate
- C#中Delegate委托事件详细介绍
- C#委托delegate 和C#反射 Reflection
- 从callback的角度来理解.NET/C# 中的 委托 (delegate)与 事件 (event)
- C#学习重要概念之委托(delegate)
- 初涉c#中的委托delegate
- C# Delegate(委托)与多线程
- 终于会用c#中的delegate(委托)和event(事件)了
- C#委托的介绍(delegate、Action、Func、predicate)
- 观察者模式(observer)之委托(delegate) c#简单例子
- c#委托delegate简单例子
- [置顶] 【C#】 委托(Delegate)
- 关于C#的delegate(委托)和event(事件)的使用
- c#中的delegate(委托)和event(事件)
- C#:委托(delegate)
- Unity3D 利用C#实现简单的代理模式Delegate(委托)
- 【C#】delegate委托的定义和使用方法
- C#中的委托Delegate
- C#之委托delegate