8.10 Delegates

本文主要介绍了C#中委托的相关内容。委托类似于其他语言的函数指针,但它是面向对象且类型安全的。定义和使用委托有声明、实例化和调用三个步骤,还通过示例展示了委托的使用,强调了其匿名调用的强大功能及适用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.10 Delegates
Delegates enable scenarios that some other languages have addressed with
function pointers. However,
unlike function pointers, delegates are object-oriented and type-safe.
A delegate declaration defines a class that is derived from the class
System.Delegate. A delegate instance
encapsulates one or more methods, each of which is referred to as a
callable entity. For instance methods, a
callable entity consists of an instance and a method on that instance. For
static methods, a callable entity
consists of just a method. Given a delegate instance and an appropriate set
of arguments, one can invoke all
of that delegate instance.s methods with that set of arguments.
C# LANGUAGE SPECIFICATION
44
An interesting and useful property of a delegate instance is that it does
not know or care about the classes of
the methods it encapsulates; all that matters is that those methods be
compatible (§22.1) with the delegate.s
type. This makes delegates perfectly suited for .anonymous. invocation.
This is a powerful capability.
There are three steps in defining and using delegates: declaration,
instantiation, and invocation. Delegates
are declared using delegate declaration syntax. The example
delegate void SimpleDelegate();
declares a delegate named SimpleDelegate that takes no arguments and
returns no result.
The example
class Test
{
static void F() {
System.Console.WriteLine("Test.F");
}
static void Main() {
SimpleDelegate d = new SimpleDelegate(F);
d();
}
}
creates a SimpleDelegate instance and then immediately calls it.
There is not much point in instantiating a delegate for a method and then
immediately calling that method
via the delegate, as it would be simpler to call the method directly.
Delegates really show their usefulness
when their anonymity is used. The example
void MultiCall(SimpleDelegate d, int count) {
for (int i = 0; i < count; i++) {
d();
}
}
shows a MultiCall method that repeatedly calls a SimpleDelegate. The
MultiCall method doesn.t
know or care about the type of the target method for the SimpleDelegate,
what accessibility that method
has, or whether or not that method is static. All that matters is that the
target method is compatible (§22.1)
with SimpleDelegate.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值