C#中的委托delegate和匿名方法的使用

在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

  1. 本网站所收集的部分资料来源于互联网,本站不对其真实性负责,也不构成任何其他建议。如果您发现有侵犯您权益的内容,请与我们取得联系,我们会及时修改或删除。
  2. 传递知识、传递力量,欢迎各位网友对本站的文章进行转载和分享。
  3. 本站QQ群交流群:904314688  群号:904314688
发表评论
 
评论列表(目前共有 条评论)
暂时还没有评论哦~

文章搜索

商家广告


版权所有:秋风雅居 (www.198933.com) ©2024 All Rights Reserved.

粤ICP备20031662号