2 yyy123321123 yyy123321123 于 2015.06.03 08:55 提问

如果只有一个方法还有必要用委托么?

在委托这个地方卡了很久,在网上也看了很多文章,基本上都是说的委托的语法,偶尔有介绍使用场景,但是还是一直没弄明白,总有点迷迷糊糊的,做技术就应该吧问题搞的明明白白,要不然还不如不搞,希望大家给讲解下这个问题。谢谢了
比如下面的代码

         static Func<int, int, int> CalculateHandler = (x, y) => x + y;

        static void Main(string[] args)
        {
            var result = CalculateHandler(5, 10);
            Console.WriteLine(result);
        }

直接写个方法不也是很简短么,而且还少了个变量

        static   int Calculate(int x, int y)
        {
            return x + y;
        }

也许你要说,以后你增加减法,除法更多的运算的时候可以复用...
我开头已经说了“只有一个方法的时候”

4个回答

gamefinity
gamefinity   Rxr 2015.06.03 09:57
已采纳
  • 如何取舍,是否需要委托,甚至于是否需要使用某个设计模式等,并不是语法上能解决的问题。你现在这样问谁也无法回答你。这个是根据业务来选择的。
  • 举个例子来说。
  • 与一个设备通过TCPIP连接。设备每次回返回当时的交易内容。由于只有一个类型的数据包需要进行解析,因此就直接写了。
  • 随后发现需要获得设备的状态,于是重新定义了一个类型的数据包。现在两个包了,是否需要使用委托呢?还是直接if判断后分别解析?
  • 随着业务的发展,通讯使用到的数据包类型越来越多,这时候你肯定会觉得要使用委托了。
  • 那么现在反过来,你觉得在刚开始的时候,是否需要使用委托呢?
Tiger_Zhao
Tiger_Zhao   Rxr 2015.06.03 09:11

这只是举例**怎么做委托**,至于**要不要用委托**得你自己取舍,不是为了用委托而委托。

Tiger_Zhao
Tiger_Zhao 回复yyy123321123: 经验和习惯的问题。你觉得某个操作可能会扩充成多种方式,可以设计成委托。但是不喜欢也可以不用委托,比如语法不支持委托的时候,用分支语句一样可以实现功能。没必要纠结,不是用了委托就是高大上了。
2 年多之前 回复
yyy123321123
yyy123321123 回复Tiger_Zhao: 大哥,既然能取舍,那它这个取舍的度怎么把握呢?
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao 回复yyy123321123: 还是那句话“这只是例子”。难道委托只能用在main里面?
2 年多之前 回复
yyy123321123
yyy123321123 我就是想知道怎么取舍,特别是看到Lambda表达式的那些例子的时候更晕 delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 } 不是说的委托就是为了解耦么,本来应该是把运算提取出来作为一个方法,现在又写会到main方法中,这不是本末倒置么?
2 年多之前 回复
yyy123321123
yyy123321123   2015.06.03 09:20

我就是想知道怎么取舍,特别是看到Lambda表达式的那些例子的时候更晕

 delegate int del(int i);
static void Main(string[] args)
{
    del myDelegate = x => x * x;
    int j = myDelegate(5); //j = 25
}

不是说的委托就是为了解耦么,本来应该是把运算提取出来作为一个方法,现在又写会到main方法中,这不是本末倒置么?

frank_20080215
frank_20080215   2015.06.03 12:46

委托相当于C语言的函数指针。
常用于事件处理

yyy123321123
yyy123321123 事件只是一方面,处理同类型功能的函数的时候也可能用,异步编程也常用...
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片