我收到了一个带有以下伪代码的win-form应用程序。当这些函数与表单控件交互时,大多数当前函数代码都写在表单后面的代码中。
有10种不同的功能(彼此完全不同的签名)。该应用程序的第一个版本重复了所有10个功能的步骤1,2,4。第二个版本通过添加带有数值的select case
语句来优化它,以调用设备连接循环中的函数。
但是我觉得功能代表可以改进这段代码。
但是,我完全迷失了与我手头的代表概念的模拟。我可以在这种情况下使用委托吗?我应该如何处理应用程序执行/代码设计?
答案 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
内添加所有类型的异常处理等 - 应该很容易做到