C# 语言规范--1.10 委托
2008-05-03 17:25
302 查看
委托适用于那种在某些其他语言中需用函数指针来解决的情况(场合)。但是,与函数指针不同,委托是面向对象和类型安全的。
委托声明定义一个类,它是从 System.Delegate 类派生的类。委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成。对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且用的都是上述的同一组参数。
委托实例的一个有趣且有用的属性是:它既不知道也不关心有关它所封装的方法所属的类的种种详情;对它来说最重要的是这些方法与该委托的类型兼容。这使委托非常适合“匿名”调用。这是一个强大的功能。
定义和使用委托分三个步骤:声明、实例化和调用。委托用委托声明语法来声明。示例
delegate void SimpleDelegate();
声明一个名为 SimpleDelegate 的委托,它不带参数并且不返回任何结果。
示例
class Test
{
static void F() {
System.Console.WriteLine("Test.F");
}
static void Main() {
SimpleDelegate d = new SimpleDelegate(F);
d();
}
}
创建一个 SimpleDelegate 实例,然后立即调用它。
这样做(为方法创建一个委托,然后立即通过这个委托调用该方法)并没有太大意义,因为直接调用方法更简单。当涉及它的匿名特性时,委托才真正显示出它的效用。示例
void MultiCall(SimpleDelegate d, int count) {
for (int i = 0; i < count; i++) {
d();
}
}
显示了一个重复调用 SimpleDelegate 的 MultiCall 方法。MultiCall 方法不知道也不在乎 SimpleDelegate 的目标方法的类型、该方法所具有的可访问性或者该方法是否为静态。对它来说最重要的是目标方法与 SimpleDelegate 兼容。
委托声明定义一个类,它是从 System.Delegate 类派生的类。委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成。对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且用的都是上述的同一组参数。
委托实例的一个有趣且有用的属性是:它既不知道也不关心有关它所封装的方法所属的类的种种详情;对它来说最重要的是这些方法与该委托的类型兼容。这使委托非常适合“匿名”调用。这是一个强大的功能。
定义和使用委托分三个步骤:声明、实例化和调用。委托用委托声明语法来声明。示例
delegate void SimpleDelegate();
声明一个名为 SimpleDelegate 的委托,它不带参数并且不返回任何结果。
示例
class Test
{
static void F() {
System.Console.WriteLine("Test.F");
}
static void Main() {
SimpleDelegate d = new SimpleDelegate(F);
d();
}
}
创建一个 SimpleDelegate 实例,然后立即调用它。
这样做(为方法创建一个委托,然后立即通过这个委托调用该方法)并没有太大意义,因为直接调用方法更简单。当涉及它的匿名特性时,委托才真正显示出它的效用。示例
void MultiCall(SimpleDelegate d, int count) {
for (int i = 0; i < count; i++) {
d();
}
}
显示了一个重复调用 SimpleDelegate 的 MultiCall 方法。MultiCall 方法不知道也不在乎 SimpleDelegate 的目标方法的类型、该方法所具有的可访问性或者该方法是否为静态。对它来说最重要的是目标方法与 SimpleDelegate 兼容。
相关文章推荐
- C#语言规范2.0和C#语言规范1.2 PDF版
- 一个例子帮你搞懂C#语言高级特性系列(02) --- 委托、事件和Lambda表达式
- (摘)C# 语言规范(Standard ECMA-334 | ISO/IEC 23270)
- C#语言规范
- C#2.0语言规范(四)迭代器
- C# 语言规范
- C# 语言规范--1.4 自动内存管理
- C# 3.0 语言规范
- [翻译] C# 3.0语言规范
- C#的委托(这个是新的语言特性,很重要)
- C# 3.0语言新特性(语言规范):7 查询表达式
- C# 3.0语言新特性(语言规范):7 查询表达式
- C# 3.0语言新特性(语言规范):4 对象和集合初始化器
- [翻译] C# 3.0语言规范
- C#2.0语言规范(五)不完全类型
- C#语言命名规范
- C#和java,C#和C++各有什么不同(2) -- 语言规范的比较
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
- Visual Studio 及 .NET Framework 及 C#语言规范 的 版本对应 及C#新增功能
- c#语言基础(5)----委托