C#指南,重温基础,展望远方!(11)C#委托
2018-05-30 10:40
477 查看
委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托类似于其他一些语言中的函数指针概念,但与函数指针不同的是,委托不仅面向对象,还类型安全。
下面的示例声明并使用
Function委托类型。 C#复制
using System; delegate double Function(double x); class Multiplier { double factor; public Multiplier(double factor) { this.factor = factor; } public double Multiply(double x) { return x * factor; } } class DelegateExample { static double Square(double x) { return x * x; } static double[] Apply(double[] a, Function f) { double[] result = new double[a.Length]; for (int i = 0; i < a.Length; i++) result[i] = f(a[i]); return result; } static void Main() { double[] a = {0.0, 0.5, 1.0}; double[] squares = Apply(a, Square); double[] sines = Apply(a, Math.Sin); Multiplier m = new Multiplier(2.0); double[] doubles = Apply(a, m.Multiply); } }
Function
委托类型实例可以引用需要使用 double
自变量并返回 double
值的方法。 Apply
方法将给定的函数应用于 double[]
的元素,从而返回包含结果的 double[]
。 在 Main
方法中,Apply
用于向 double[]
应用三个不同的函数。
委托可以引用静态方法(如上面示例中的
Square或
Math.Sin)或实例方法(如上面示例中的
m.Multiply)。 引用实例方法的委托还会引用特定对象,通过委托调用实例方法时,该对象会变成调用中的
this。
还可以使用匿名函数创建委托,这些函数是便捷创建的“内联方法”。 匿名函数可以查看周围方法的局部变量。 因此,可以更轻松地编写上面的乘数示例,而无需使用 Multiplier 类:
C#复制double[] doubles = Apply(a, (double x) => x * 2.0);
委托的一个有趣且有用的属性是,它不知道也不关心所引用的方法的类;只关心引用的方法是否具有与委托相同的参数和返回类型。
相关文章推荐
- C#指南,重温基础,展望远方!(6)C#类和对象
- C#指南,重温基础,展望远方!(7)C#结构
- C#指南,重温基础,展望远方!(8)C#数组
- C#指南,重温基础,展望远方!(9)C#接口
- C#指南,重温基础,展望远方!(10)C#枚举
- C#指南,重温基础,展望远方!(12)C#特性
- C#指南,重温基础,展望远方!(1)C#语言介绍
- C#指南,重温基础,展望远方!(13)C#泛型
- C#指南,重温基础,展望远方!(2)程序结构
- C#指南,重温基础,展望远方!(3)类型和变量
- C#指南,重温基础,展望远方!(4)表达式
- C#指南,重温基础,展望远方!(5)C#语句
- .Net学习笔记----2015-07-23(C#基础复习11,字符串复习)
- Win10系列:C#应用控件基础11
- 开源Math.NET基础数学类库使用(11)C#计算相关系数
- 【原创】开源Math.NET基础数学类库使用(11)C#计算相关系数
- C# 温故知新 基础篇(11) 泛型<思维导图>
- C#基础: C#委托(代理)delegate
- C#基础系列(11)-- 第四部分 C#高级特性 -- 泛型概念(1)
- 查询表达式基础(C# 编程指南)