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();

    }

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

  • 相关阅读:
    [javaSE] 数组(获取最值)
    [javascript] Promise简单学习使用
    [javaSE] 基本类型(String相关)
    [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
    [PHP] 重回基础(IO流)
    [PHP] 重回基础(Array相关函数)
    [PHP] 重回基础(date函数和strtotime函数)
    [HTML5] Canvas绘制简单图片
    [javaSE] 集合框架(TreeSet)
    [android] 手机卫士黑名单功能(ListView优化)
  • 原文地址:https://www.cnblogs.com/tcli/p/6661795.html
Copyright © 2011-2022 走看看