zoukankan      html  css  js  c++  java
  • C#指南,重温基础,展望远方!(11)C#委托

    委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托类似于其他一些语言中的函数指针概念,但与函数指针不同的是,委托不仅面向对象,还类型安全。

    下面的示例声明并使用 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);
    

    委托的一个有趣且有用的属性是,它不知道也不关心所引用的方法的类;只关心引用的方法是否具有与委托相同的参数和返回类型。

  • 相关阅读:
    Linux常见问题解决
    (转)CoreDNS:Kubernetes内部域名解析原理、弊端及优化方式
    (转)Go sync.WaitGroup的用法
    (转)5个维度对 Kubernetes 集群优化及压测方案
    使用 Alpine 作为基础镜像时可能会遇到的常见问题的解决方法
    提前预防K8s集群资源不足的处理方式配置
    docker runc升级
    Nginx常见问题解决
    DNS泛域名解析应用(nip.io)
    使用Velero备份Kubernetes集群
  • 原文地址:https://www.cnblogs.com/lzfsuifeng/p/9109584.html
Copyright © 2011-2022 走看看