gpt4 book ai didi

c# - 当两个重载具有相同的签名时调用构造函数重载

转载 作者:IT王子 更新时间:2023-10-29 04:46:06 25 4
gpt4 key购买 nike

考虑下面的类,

class Foo
{
public Foo(int count)
{
/* .. */
}

public Foo(int count)
{
/* .. */
}
}

以上代码无效,无法编译。现在考虑以下代码,

class Foo<T>
{
public Foo(int count)
{
/* .. */
}

public Foo(T t)
{
/* .. */
}
}

static void Main(string[] args)
{
Foo<int> foo = new Foo<int>(1);
}

以上代码有效且编译良好。它调用 Foo(int count)

我的问题是,如果第一个无效,第二个如何有效?我知道类 Foo 是有效的,因为 T 和 int 是不同的类型。但是当它像 Foo foo = new Foo (1) 这样使用时,T 正在获取整数类型并且两个构造函数将具有相同的签名,对吗?为什么编译器不显示错误而是选择重载来执行?

最佳答案

没有歧义,因为编译器会选择匹配的最具体的 Foo(...) 重载。由于具有泛型类型参数的方法被认为不如对应的非泛型方法具体,因此当 T == 整数。因此,您正在调用 Foo(int) 重载。

你的第一种情况(有两个 Foo(int) 定义)是一个错误,因为编译器只允许一个方法的一个定义具有完全相同的签名,而你有两个。

关于c# - 当两个重载具有相同的签名时调用构造函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293201/

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