【发布时间】:2013-07-19 21:58:40
【问题描述】:
我想知道,您有一些代码需要在例如每个方法中执行。
我知道每个人都有另一种编程“风格”,每个人都喜欢另一种方式来做某事。
但是例如,我现在正在某些类(网络摄像头的设置)上编写一些适配器,我可以在其中设置例如颜色模式、曝光、增益等。在每种方法(设置更改)中,我需要:
1) 停止相机
2) 设置参数!!这只是另一个代码的一步!
3) 再次创建相机实例
4) 启动相机
我在这里看到了两种方法:
1)可能“丑陋”的书面复制和粘贴代码
StopCam();
_wCamDev.Gain=20; // COMMANDS TO SET DEFINED PARAMETER, FOR EXAMPLE GAIN
CreateCam();
StartCam();
您可以在每个方法中使用此代码,并且只更改第二行 (_wCamDev.Gain=20;)。
很确定这段代码为其他程序员做了什么,2 年后更容易理解这些序列在做什么。但另一方面,由于多次复制和粘贴代码,这段代码写得不正确(至少对我来说)。
2)您可以使用“参数中的泛型函数”之类的内容,并且可以使用以下内容:
public void refreshCam(Func<T,out>){
StopCam();
CHANGE_PARAMS_BY_GEN_FUNCTION;
CreateCam();
StartCam();
}
通用调用函数将设置参数,您可以有一些更难理解的代码,但没有多个序列(复制和粘贴代码),您可以在每个方法中轻松地使用您的参数调用这个 refreshCam() 并且您可以在其他方法中指定它们。
您更喜欢哪种“代码”?为什么?有没有另一种(更好的)方法可以做到这一点? 甚至可以通过参数发送通用函数吗? 我认为适配器设计模式最重要的是如何正确编写它。
【问题讨论】:
-
第二个,出于世界上所有的原因。首先,您只有一个地方可以修改升级刷新序列所需的日期。
-
是的,这是第二个的好理由。现在可以在参数上编写通用函数吗?因为我发现只有参数的功能。我知道泛型是如何工作的(我从来没有在 C# 中做过,在我的生活中,3 年后我正在使用它——我从来不需要它)。所以我不确定它是否可能。
-
查看泛型编程。毫无疑问,模块化你的代码。编写像 C# 这样的高级语言是因为我们需要抽象的通用代码。 boost.org/community/generic_programming.html
-
感谢所有 cmets,X.L.Ant 快速回答了我所有我想要的。但在答案中,我仍然对另一个有趣或可怕(威慑)的解决方案很感兴趣 :D :]
标签: c# function parameter-passing adapter generic-programming