比方说,我们有一个方法,为了论证,我们将调用MethodOne;
public void MethodOne()
{
//do stuff.
}
现在假设我们要创建一个可选的peramater,我们可能会决定创建另一个具有相同名称的方法,例如,它需要不同的重载;
public void MethodOne()
{
//do stuff.
}
public void MethodOne(bool checkVar)
{
if(checkVar)
{
//do stuff
}
else
{
//do other stuff
}
}
所以现在我们有一种方法有两种不同的过载组合(?)。在实践中,这比使用一个方法更好,只是检查可选重载是否为空或包含信息,例如;
public void MethodOne(int? testVar)
{
if(testVar != null)
{
//do stuff
}
}
这可能看起来微不足道,只有一个重载,但想象我有5个变量我想要通过,我会创建5个方法,同名具有不同的重载,或只是一个方法并检查传递的变量?< / p>
答案 0 :(得分:4)
这有一些解决方法。例如,您可以使用枚举器和Object数组作为第二个参数,其中包含实际参数值,以便您通过切换枚举器知道如何处理数据...或者您可以只声明5个Object参数然后检查它们输入一个开关,相应地装箱并继续。但这两种选择都是非常糟糕的做法。
我建议你坚持不同的重载:
public void MethodOne(Boolean value)
{
// Process the value...
}
public void MethodOne(Int32 value)
{
// Process the value...
}
public void MethodOne(Int32 value, String text)
{
// Process the value and the text...
}
// And so on...
参数声明中的默认数据:
public void MethodOne(Int32 integer = 1, String text = "hello", ...)
{
// Process everything inside the method...
}
或参数化方法(如果每个对象类型都有一个共同的处理):
public void MethodOne(params Object[] parameters)
{
for (int i = 0; i < parameters.Length; ++i)
// Check type of parameter and process the value...
}
或者如果你的设计允许冒泡的方法(这是我最喜欢的一个,因为第一个只产生大量的代码冗余,第二个可能有时会让你或其他与你一起工作的开发人员感到困惑):
public void MethodOne(Int32 value)
{
MethodOne(value, "hello");
}
public void MethodOne(Int32 value, String text)
{
// Process everything inside the method...
}
答案 1 :(得分:3)
您可以使用optional arguments:
public void MethodOne(int testVar = 0)
{
if(testVar != 0)
{
//do stuff
}
}
答案 2 :(得分:2)
你通常会在这样的重载上大放异彩:
public void MethodOne()
{
MethodOne(1)
}
public void MethodOne(int testVar)
{
MethodOne(testVar, "test")
}
public void MethodOne(int testVar, string testString)
{
MethodOne(testVar, testString, null)
}
public void MethodOne(int testVar, string testString, object testObject)
{
// Do your actual code here
}
这相当于
public void MethodOne(int testVar = 1, string testString = "test", object testObject = null)
{
// Do your actual code here
}
但通常你应该优先于默认参数的重载。此外,通过像我的示例中那样“冒泡”,您可以避免使用冗余代码或冗余的“默认参数”
答案 3 :(得分:2)
随着参数数量的增加,我不希望通过方法的嵌套if / else逻辑来查看正在使用的参数。它很难阅读,理解,维护并且可能导致错误。使用重载并保持您的方法简洁,精益和可维护。