zoukankan      html  css  js  c++  java
  • C#

    泛型委托的基本语法格式如下:

    delegate ReturnType DelegateName<Type>(Type x, Type y);

    通过实践发现,泛型委托可以大大减少代码量,下面举个例子

    如:分别使用四则运算来计算一系列算式,然后汇总计算结果。

    一开始我也是很笨的定义了四个四则运算的方法。

    class Calculator

    {

    delegate int calc(int x, int y);

    public int Add(int x, int y)

    {

    return x + y;

    }

    public int Minus(int x, int y)

    {

    return x - y;

    }

    public int Multiply(int x, int y)

    {

    return x + y;

    }

    public int Divide(int x, int y)

    {

    if (y != 0)

    return x / y;

    else throw new Exception("Cannot divide by zero.!");

    }

    }

    然后在使用的时定义委托实例,传递方法。

    static void Main(string[] args)

    {

    Calculator calc = new Calculator();

    Calculator.DCalc dc = calc.Add;

    int addResult = dc.Invoke(3, 4);

    dc = calc.Minus;

    int minusResult = dc.Invoke(3, 4);

    dc = calc.Multiply;

    int multiplyResult = dc.Invoke(3, 4);

    dc = calc.Divide;

    int dividedResult = dc.Invoke(3, 4);

    int result = addResult + minusResult + multiplyResult + dividedResult;

    Console.WriteLine(result);

    Console.Read();

    }

    看看换成泛型委托会变成什么样

    这时我们的计算类更为简洁

    class Calculator

    {

    public delegate T CalcDelegate<T>(T x, T y);

    }

    而对于调用,则需要定义各类运算的代码,这里使用了匿名函数:

    static void Main(string[] args)

    {

    Calculator.CalcDelegate<int> dc = new Calculator.CalcDelegate<int>((a, b) =>

    {

    return a + b;

    });

    int addResult = dc.Invoke(3, 4);

    dc = new Calculator.CalcDelegate<int>((a, b) =>

    {

    return a - b;

    });

    int minusResult = dc.Invoke(3, 4);

    dc = new Calculator.CalcDelegate<int>((a, b) =>

    {

    return a * b;

    });

    int multiplyResult = dc.Invoke(3, 4);

    dc = new Calculator.CalcDelegate<int>((a, b) =>

    {

    if (b != 0) return a / b;

    else throw new Exception("Cannot divide by zero.!");

    });

    int dividedResult = dc.Invoke(3, 2);

    int result = addResult + minusResult + multiplyResult + dividedResult;

    Console.WriteLine(result);

    Console.Read();

    }

    由此可见,泛型委托帮助我们减少了对象成员的定义工作。

  • 相关阅读:
    python CreateUniqueName()创建唯一的名字
    node 创建静态服务器并自动打开浏览器
    基于jQuery 的插件开发
    Fetch
    纯css 来实现下拉菜单
    javascript模板引擎之
    jquery jsonp 跨域
    数据库增删改查
    Promise
    Vue.js
  • 原文地址:https://www.cnblogs.com/tcli/p/6661795.html
Copyright © 2011-2022 走看看