泛型委托的应用示例

时间:2022-06-27 08:44:18

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

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

}

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