委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他方法一样具有参数和返回值。它是一种安全 的封装方法的类型,于C和C++中的函数指针类似。但是与C中的函数指针不同,委托是面向对象的,类型安全的和保险的。使用委托,需要先创建一个委托,并 对他进行一个或多个实例化,下面的实例演示了如何使用委托。
// 声明一个委托
public
delegate
void
Del
(string
message
);
class
test
{
// 方法的参数类型和返回类型要与委托中定义的类型完全一致
public
static
void
DelegateMethod
(string
message
)
{
Console
.
WriteLine
(message
);
}
static
void
Main
()
{
// 使用委托
Del
handler
=
DelegateMethod
;
handler
("Hello world"
);
Console
.
ReadKey
();
}
}
注意到上面的代码中,委托定义的方法返回值为void,参数为string类型。test类中的方法的返回值和参数类型是一致的。事实上,定义一个委托是 指定义一个新类,委托实现为派生自基类System.MulticastDelegate类
- 首先创建一个委托
- 实现一个方法,方法的返回值和参数类型与委托一致
- 实例化委托,并传入参数获得结果
委托示例:
// 声明委托
public
delegate
double
Op
(double
value
);
//
两个简单的数学方法
class
MathOperations
{
public
double
MulByTwo
(double
x
)
{
return
x
*
2
;
}
public
double
Square
(double
x
)
{
return
x
*
x
;
}
}
class
Test
{
static
void
Main
()
{
MathOperations
mo
=
new
MathOperations
();
//
实现委托
Op
op1
=
mo
.
MulByTwo
;
Op
op2
=
mo
.
Square
;
Console
.
WriteLine
("3 Multipy By Two = {0}"
,
op1
(3
));
Console
.
WriteLine
("3 Squares = {0}"
,
op2
(3
));
Console
.
ReadKey
();
}
}