为什么带有可空值的C#重载不是模棱两可的?

为什么C#允许以下方法重载:


void F(int a) { Console.WriteLine(1); }

void F(int? a) { Console.WriteLine(2); }

如果我运行该代码:


A a = new A();

a.F(1); 

它打印1。编译器如何知道要调用哪一个。这不是模棱两可的吗?


我认为可空类型背后的想法是,您可以传入正确类型的值,也可以传入null。所以我应该能够调用第一F与(1)和第二F带(1)或(null)。


我这里有一个很好的例子。


更新: 阅读答案后,我感到困惑的原因是我认为可为空的参数与可选参数同义。


确实,用替换第二种方法void F(int a = 0);会导致编译错误。


慕的地6264312
浏览 112回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP