我正在教我的学院 c#,一般来说, OOP ,在一堂课中我对这段代码感到困惑。从语法的角度来看显然是正确的。
using System;
namespace ConstructorTest
{
public class Character
{
private readonly string _state;
public Character(char a)
{
_state = "First constructor: " + a;
}
public Character(char a, bool uppercase = false)
{
_state = "Second constructor: " + (uppercase ? Char.ToUpper(a) : a);
}
public override string ToString()
{
return _state;
}
public static void Print()
{
Console.WriteLine("First print");
}
public static void Print(bool uppercase = false)
{
string text = "Second print";
Console.WriteLine(uppercase ? text.ToUpper() : text);
}
}
class Program
{
private static void Main()
{
Console.WriteLine(new Character('a'));
Console.WriteLine(new Character('A'));
Console.WriteLine(new Character('a', true));
Console.WriteLine(new Character('A', true));
Console.WriteLine();
Character.Print();
Character.Print(true);
}
}
}
我的意思是理解哪个函数将被称为
没有问题Character.Print(true)
但Character.Print()
有两种解释
输出
First constructor: a
First constructor: A
Second constructor: A
Second constructor: A
First print
SECOND PRINT
所以我的问题是 - 允许隐藏构造或函数重载的c#有什么意义?
答案 0 :(得分:2)
我认为对你的问题的简单回答是,在C#的历史中,方法重载出现在默认参数之前。所以,曾经有一段时间支持像Print
这样的方法,无论有没有参数,都会有2次重载
void Print(){Print(false);}
void Print(bool uppercase){...}
沿着默认参数,你可以选择只有一个
void(bool uppercase = false)
但是由于历史原因,重载仍然存在,并且因为您可以拥有比默认参数更复杂的重载功能。
运行时具有本QA中指定的方法解析规则:Method Overloading with Optional Parameter