主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
C#

C# 基础

C# 主页
C# 概述
C# 环境
C# 程序结构
C# 基本语法
C# 数据类型
C# 类型转换
C# 变量
C# 常量
C# 运算符
C# 决策结构
C# 循环结构
C# 封装
C# 方法
C# 可空类型
C# 数组
C# 字符串
C# 结构体
C# 枚举
C# 类
C# 继承
C# 多态性
C# 操作符重载
C# 接口
C# 命名空间
C# 预处理
C# 正则表达式
C# 异常
C# 文件与流

C# 高级

C# 属性(Attributes)
C# 反射
C# 属性(Properties)
C# 索引器
C# 委托
C# 事件
C# 集合
C# 泛型
C# 匿名方法
C# 不安全代码
C# 线程

基础

C# 主页
C# 概述
C# 环境
C# 程序结构
C# 基本语法
C# 数据类型
C# 类型转换
C# 变量
C# 常量
C# 运算符
C# 决策结构
C# 循环结构
C# 封装
C# 方法
C# 可空类型
C# 数组
C# 字符串
C# 结构体
C# 枚举
C# 类
C# 继承
C# 多态性
C# 操作符重载
C# 接口
C# 命名空间
C# 预处理
C# 正则表达式
C# 异常
C# 文件与流

高级

C# 属性(Attributes)
C# 反射
C# 属性(Properties)
C# 索引器
C# 委托
C# 事件
C# 集合
C# 泛型
C# 匿名方法
C# 不安全代码
C# 线程

C# 匿名方法


上一章 下一章

匿名方法

我们讨论了委托用于引用任何具有与委托相同签名的方法。换句话说,你可以使用委托对象来调用任何可以被该委托引用的方法。

匿名方法提供了一种将代码块作为委托参数传递的技术。匿名方法是没有名称的,只有方法体。

在匿名方法中,你无需指定返回类型;它是由方法体内返回语句推断出来的。

编写匿名方法

匿名方法是在创建委托实例时声明的,使用 delegate 关键字。例如,

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
   Console.WriteLine("Anonymous Method: {0}", x);
};

代码块 Console.WriteLine("Anonymous Method: {0}", x); 是匿名方法的主体。

无论是通过匿名方法还是命名方法,都可以以同样的方式调用委托,即通过将方法参数传递给委托对象。

例如,

nc(10);

示例

下面的示例演示了这一概念:

using System;

delegate void NumberChanger(int n);
namespace DelegateAppl {
   class TestDelegate {
      static int num = 10;
      
      public static void AddNum(int p) {
         num += p;
         Console.WriteLine("Named Method: {0}", num);
      }
      public static void MultNum(int q) {
         num *= q;
         Console.WriteLine("Named Method: {0}", num);
      }
      public static int getNum() {
         return num;
      }
      static void Main(string[] args) {
         // 使用匿名方法创建委托实例
         NumberChanger nc = delegate(int x) {
            Console.WriteLine("Anonymous Method: {0}", x);
         };
         
         // 使用匿名方法调用委托
         nc(10);
         
         // 使用命名方法实例化委托
         nc = new NumberChanger(AddNum);
         
         // 使用命名方法调用委托
         nc(5);
         
         // 使用另一个命名方法实例化委托
         nc = new NumberChanger(MultNum);
         
         // 使用命名方法调用委托
         nc(2);
         Console.ReadKey();
      }
   }
}

当上述代码被编译和执行时,它产生以下结果:

Anonymous Method: 10
Named Method: 15
Named Method: 30
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图