在C#开发中,我们经常会遇到使用if或者switch来进行分支判断的情况,如果分支少还好说,分支一多的话,就把代码搞得很臃肿,那么有没有办法可以解决?另外对于一些代码,可能只有一两行的,而且可能整个项目就一个地方调用,如果将这样的代码编写成一个方法的话,那么是不是有点浪费资源?有没有办法不用事先编写成一个方法来调用呢?
今天我们要学习的就是委托和匿名方法,具体看下面的代码和注释。
using System.Threading;
namespace 委托delegate的使用方法
{
class Program
{
static void Main(string[] args)
{
//传统调用
Calc(calcType.add, 1, 2);
Calc(calcType.minus, 1, 2);
Calc(calcType.divide, 1, 2);
//委托用法
Calc(add, 1, 2);
Calc(Minus, 1, 2);
Calc(Divide, 1, 2);
//传统的写法(先定义一个方法,然后将方法绑定到线程上,可能这个方法只是临时使用一次)
Thread t = new Thread(MakeSomeThing);
t.Start();
//匿名方法,无需事先定义方法,直接将方法体抽出来
new Thread(delegate ()
{
//do something
}).Start();
}
//运算类型
public enum calcType
{
add,
minus,
divide
}
private delegate int CalcDelegate(int x, int y);
//加法运算
private static int add(int x, int y)
{
return x + y;
}
//减法运算
private static int Minus(int x, int y)
{
return x - y;
}
//除法运算
private static int Divide(int x, int y)
{
return x / y;
}
///
/// 传统的做法(传入运算类型,并调用相应的方法)
///
private static void Calc(calcType t, int x, int y)
{
switch (t)
{
case calcType.add:
add(x, y);
break;
case calcType.minus:
Minus(x, y);
break;
case calcType.divide:
Divide(x, y);
break;
}
}
///
/// 使用委托的做法(将方法名作为参数传入,直接调用相应的方法)
///
///
///
///
private static void Calc(CalcDelegate makeCalc, int x, int y)
{
makeCalc(x, y);
}
private static void MakeSomeThing()
{
//do something
}
}
}
源码下载:委托delegate的使用方法.zip
ok
mjj通道