gpt4 book ai didi

c# - 为什么这个带有可空值的 C# 重载没有歧义?

转载 作者:行者123 更新时间:2023-11-30 13:53:57 24 4
gpt4 key购买 nike

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

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

如果我运行该代码:

A a = new A();
a.F(1);

它打印1。编译器如何知道调用哪一个。是不是很暧昧?

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

我有一个可运行的例子 here .

更新:阅读答案后,我的困惑源于我认为可为空参数与可选参数同义的事实。

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

最佳答案

int?实际上是一个 Nullable<int>结构,以便区分两者。

下面的调用应该打印 2

int? a = 0;
F(a);

关于下面的调用...

A a = new A();
a.F(1);

1文字是一个 int ,不是 int? , 所以它转到 void F(int a)方法。如果你要通过 null对于该方法,它不能是 int , 所以它转到 void F(int? a)方法,因为它是一个可以为 null 的数据类型。

这两种方法都能够接受 1值,但编译器将选择最具体的重载,在本例中,是接受完全相同类型的重载,int .

关于c# - 为什么这个带有可空值的 C# 重载没有歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50182862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com