【发布时间】:2016-04-01 23:34:06
【问题描述】:
我刚刚在秋季完成了 C# 的第一堂课,但有些东西我仍然不明白,想在开始 C# II 之前在寒假期间弄清楚。
问题:重载方法究竟是什么?
【问题讨论】:
我刚刚在秋季完成了 C# 的第一堂课,但有些东西我仍然不明白,想在开始 C# II 之前在寒假期间弄清楚。
问题:重载方法究竟是什么?
【问题讨论】:
两个名称相同但签名不同的方法称为重载方法。在编译时,即使方法的名称相同,编译器也会根据方法签名来识别方法。
void Add(int x, int y)
{
Console.WriteLine("Add int");
}
void Add(double x, double y)
{
Console.WriteLine("Add double");
}
这里的 Add(double x, double y) 覆盖了第一个函数 Add(int x, int y) 同名不同的签名。 如果我们调用 Add(4,2),它将调用 Add(int x, int y) 函数 如果我们调用 Add(4.0,2.0) 它将调用 Add(double x, double y) 函数。
不同数量的参数或不同类型的参数或不同的参数顺序。
无法通过更改方法的返回类型来重载方法。因为仅返回值不足以让编译器确定调用哪个方法。此外,方法的返回类型不被视为方法签名的一部分。
另请注意,out 和 ref 参数修改可以用于区分重载,如下所示:
void method1(int x);
void method1(out int x);
void method2(char c);
void method2(ref char c);
但是,您不能这样做:
void method(out int x);
void method(ref int x);
由于ref 和out 在过载意义上彼此没有区别。
并且要小心这样的重载:
void method(int x) => Console.Writeline(x);
void method(int x, int y = 0) => Console.Writeline(x * y);
这将编译并工作,但编译器将默认使用具有一个参数的第一个方法,直到您指定第二个参数,然后它将调用第二个方法。
【讨论】:
重载方法只是名称相同但签名不同的方法(允许不同类型/数量的参数)。
【讨论】: