我有一个这样的方法,消费者称之为:
static public void DisplayOrderComments(param1, param2, param3, param4)
现在我为它添加了一个重载:
static public void DisplayOrderComments(param1, param2, param3, param4, param5)
{
DisplayOrderComments(param1, param2, param3, param4);
param5.Foo();
}
这是一种不好的做法吗?有更好的方法吗?
答案 0 :(得分:28)
这绝对没问题 - 它会保留代码DRY并避免不必要的重复。
这不仅是一种不好的做法,而且是一种良好的做法。
如果您使用的是C#4.0及更高版本(VS 2010+),则可以使用param5
代替{{1}}而不是重载,正如Mikey Mouse在optional argument中提到的那样。
答案 1 :(得分:20)
好问题。
我会说不,这是正常的重载。但我会这样改变它(总是在具有大多数参数的那个中实现):
static public void DisplayOrderComments(param1, param2, param3, param4)
{
DisplayOrderComments(param1, param2, param3, param4, null);
}
static public void DisplayOrderComments(param1, param2, param3, param4, param5)
{
... // do the work
if(param5!=null)
param5.Foo();
}
答案 2 :(得分:7)
是的,我不是说它很糟糕,但是如果你使用的是C#4.0,我建议你选择最后一个参数。
你可以在这里阅读所有关于em的内容 http://msdn.microsoft.com/en-us/library/dd264739.aspx
答案 3 :(得分:4)
完全没有。这是完全可以接受的,但有两个问题。
顺便说一句,codereview.stackexchange.com可能是解决此类问题的更好地方。
答案 4 :(得分:2)
这也是为界面提供更易于使用的API的惯例。使用多个参数的方法保持接口小,但使用多个扩展方法(有时具有相同的名称),提供更易于使用的API而不会污染接口:
interface ILog
{
void Log(string message, int someNumber, float anotherParam, object moreParams);
}
public static class LogExtensions
{
public void Log(ILog this log, message)
{
log.Log(message, 42, 0, null);
}
// more methods using ILog.Log like LogFormat that takes format string...
}
答案 5 :(得分:1)
我想说这取决于DisplayOrderComments和param5.Foo()的作用。如果对于参数1到4执行param.Foo(),那么绝对,如果没有,那么你正在做一些额外的事情,这可能是值得它自己的名字。
您是在更改DisplayOrerComments的功能或副作用,还是只是运行它的条件?如果您正在引入新的副作用,那么可能值得拥有,因为它自己的函数/名称然后调用DisplayOrderComments。