这是使用委托的场景吗?

时间:2015-04-13 07:42:01

标签: c# delegates

我收到了一个带有以下伪代码的win-form应用程序。当这些函数与表单控件交互时,大多数当前函数代码都写在表单后面的代码中。

  1. 循环设备连接
  2. 连接到设备
  3. 拨打特定的功能,做一些具体的工作
  4. 关闭设备连接
  5. 有10种不同的功能(彼此完全不同的签名)。该应用程序的第一个版本重复了所有10个功能的步骤1,2,4。第二个版本通过添加带有数值的select case语句来优化它,以调用设备连接循环中的函数。

    但是我觉得功能代表可以改进这段代码。

    但是,我完全迷失了与我手头的代表概念的模拟。我可以在这种情况下使用委托吗?我应该如何处理应用程序执行/代码设计?

1 个答案:

答案 0 :(得分:1)

很难说只有伪代码,但IMO你不需要代表 - 要么使用Action<...>,要么使用Func<...>,具体取决于您是否需要结果或不

例如,它看起来像这样:

static void DoForAllDevices(Action<Connection> action)
{
    foreach(var device in myDevices)
    {
        using (var connection = ConnectTo(device))
        {
            action(connection);
        } // typically Dispose will handle the closing
    }
}

然后你只需要像这样称呼它

DoForAllDevices(connection => myFirstFun(connection, additionalParameter);

现在当然可以在DoForAllDevices内添加所有类型的异常处理等 - 应该很容易做到