委托变量可以在运行时指定一个目标方法,这个特性可用于编写插件方法。在本例中有一个名为Transform的公共方法,它对整数数组的每一个元素进行变换。Transform方法接受一个委托参数并以此为插件方法执行变换操作:
class Util
{
/// <summary>Transform方法是一个高阶函数(high-orderfunction),因为它是一个以函数作为参数的函数。(返回委托的方法也称为高阶函数)。</summary>
public static void Transform (int[] values, Func<int,int > t)
{
for (int i = 0; i < values.Length; i++)
values[i] = t (values[i]);
}
}
static void Main()
{
int[] values = { 1, 2, 3 };
Util.Transform (values, Square); // Hook in the Square method
values.Dump();
values = new int[] { 1, 2, 3 };
Util.Transform (values, Cube); // Hook in the Cube method
values.Dump();
}
static int Square (int x) => x * x;
static int Cube (int x) => x * x * x;
多播委托所有的委托实例都拥有多播能力。这意味着一个委托实例可以引用一个目标方法,也可以引用一组目标方法。委托可以使用+和+=运算符联结多个委托实例。
public class Util
{
public static void HardWork (Action<int > p)
{
for (int i = 0; i < 10; i++)
{
p (i * 10); // Invoke delegate
System.Threading.Thread.Sleep (100); // Simulate hard work
}
}
}
static void Main()
{
Action<int > p = WriteProgressToConsole;
p += WriteProgressToFile;
Util.HardWork (p);
}
static void WriteProgressToConsole (int percentComplete)
{
Console.WriteLine ("第1个委托实例: "+percentComplete);
}
static void WriteProgressToFile (int percentComplete)
{
//System.IO.File.WriteAllText ("progress.txt", percentComplete.ToString());
Console.WriteLine ("第2个委托实例:>>>>>>>");
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有