首页 > 开发 > 综合 > 正文

C# 语言规范--1.10 委托

2024-07-21 02:29:58
字体:
来源:转载
供稿:网友

  委托适用于那种在某些其他语言中需用函数指针来解决的情况(场合)。但是,与函数指针不同,委托是面向对象和类型安全的。

  委托声明定义一个类,它是从 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 兼容。

  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表