码迷,mamicode.com
首页 > Windows程序 > 详细

C# - 泛型委托的应用示例

时间:2017-04-03 13:55:54      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:add   class   stat   调用   exce   简洁   ati   type   new   

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

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

}

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

C# - 泛型委托的应用示例

标签:add   class   stat   调用   exce   简洁   ati   type   new   

原文地址:http://www.cnblogs.com/tcli/p/6661795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!