[英]Is this a bad practice in overloading a method?
我有一个这样的方法,它的消费者称之为:
static public void DisplayOrderComments(param1, param2, param3, param4)
现在我为它添加了一个重载:
static public void DisplayOrderComments(param1, param2, param3, param4, param5)
{
DisplayOrderComments(param1, param2, param3, param4);
param5.Foo();
}
这是一种不好的做法吗? 有更好的方法吗?
好问题。
我会说不,这是正常的重载。 但我会这样改变它( 总是在具有大多数参数的那个中实现 ):
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();
}
是的,我不是说这很糟糕,但是如果你使用的是C#4.0,我建议你选择最后一个参数。
你可以在这里阅读所有关于em的信息http://msdn.microsoft.com/en-us/library/dd264739.aspx
一点也不。 这是完全可以接受的,但有两个问题。
顺便说一句,codereview.stackexchange.com可能是这类问题的更好地方。
这也是为界面提供更易于使用的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...
}
我想说这取决于DisplayOrderComments和param5.Foo()的作用。 如果它为参数1到4执行param.Foo(),那么绝对,如果没有,那么你正在做一些额外的事情,这可能值得它自己的名字。
您是在更改DisplayOrerComments所做的事情或副作用,还是只是它运行的条件? 如果您正在引入新的副作用,那么可能值得拥有,因为它自己的函数/名称然后调用DisplayOrderComments。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.