重载方法真的有什么重大优势吗?
让我们考虑以下示例:
class SillyMath
{
public static int Plus(int number1, int number2)
{
return Plus(number1, number2, 0);
}
public static int Plus(int number1, int number2, int number3)
{
return Plus(number1, number2, number3, 0);
}
public static int Plus(int number1, int number2, int number3, int number4)
{
return number1 + number2 + number3 + number4;
}
}
使用默认值的参数不是更容易吗?
public static int Plus(int number1, int number2, int number3 = 0, int number4 = 0)
{
return number1 + number2 + number3 + number4;
}
1。那么有谁能告诉我为什么在编程时我会考虑重载?
2。如果我需要引入一些条件语句怎么办?超载是否仍然具有相关性?
编辑:此外,同时我了解到重载也可以有不同的返回类型。在我看来,这是值得考虑的重载。
答案 0 :(得分:3)
过载存在很久之前C#
中存在默认值参数,但
所以有人可以告诉我为什么在编程时会考虑重载?
如果参数的多样性往往很大(我是一个主观的,但我会说多于5个),最好使用overload
,因为它更容易阅读码。
如果我需要引入一些条件语句怎么办?超载是否仍然具有相关性?
不要真的得到你要求的东西,但我假设,你的意思是根据不同的参数值抛出异常。
这是一个非常好的例子,最好使用重载,在每个重载函数中本地化决策逻辑,而不是在一个大单一方法中if/elseif/else
或switch/case
。
希望这有帮助。
修改强>
关于number3
的最新评论。
我会考虑这样的事情:
///
///<int number3>A number for something not more then default value </int number3> //COMMENT
public void function(int number3Maximum = 100) //MAKE ESPLICIT EXPECTED MAXIMUM VALUE
{
if(number3Maximum >100)
throw new ArgumentOutOfRangeException("number3Maximum can not be more then default maximum");
..... //CODE
}
答案 1 :(得分:3)
一个原因可能是制作看似单一的方法,它采用各种不同的输入。例如,BinaryWriter.Write
具有以下重载(以及其他几个):
Write(Boolean)
Write(Byte)
Write(Byte[])
Write(Char)
Write(Char[])
Write(Decimal)
Write(Double)
Write(Int16)
Write(Int32)
Write(Int64)
Write(SByte)
Write(Single)
Write(String)
Write(UInt16)
Write(UInt32)
Write(UInt64)
允许您编写如下代码:
bool value1 = true;
int value2 = 5;
double value3 = 5.5;
byte value4 = 1;
using (BinaryWriter writer = GetABinaryWriter())
{
writer.Write(value1);
writer.Write(value2);
writer.Write(value3);
writer.Write(value4);
}
答案 2 :(得分:1)
我更愿意用您的语言解释
class SillyMath
{
public static int Plus(int number1, int number2)
{
return Plus(number1, number2, 0);
}
public static int Plus(int number1, int number2, int number3)
{
return Plus(number1, number2, number3, 0);
}
public static int Plus(int number1, int number2, int number3, int number4)
{
return number1 + number2 + number3 + number4;
}
}
现在假设有两个用户A和B;
A的要求是添加两个数字43&amp; 45
B的要求是增加三个数字123,98&amp; 63
如果我们使用两个争论函数,即int
Plus(int number1, int number2)
然后B一直在编写像Plus(123,Plus(98,63));
同样对于三个论证函数A的代码是Plus(43,45,0);
现在,从某些角度来看,您可以看到两个代码看起来都很脏。 因此,有时为了方便程序员实现重载功能,这会为任务增加额外的自定义功能。
一个例子
MessageBox.Show("You must enter a name.", "Name Entry Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
您可以使用不带"Name Entry Error",MessageBoxButtons.OK,MessageBoxIcon.Exclamation
的MessageBox,只有您会错过的是自定义,并且会以默认形式出现。