c# - 选择了哪个 C# 方法重载?

标签 c# .net generics

为什么在两个重载匹配时调用泛型方法?

public static void method1(object obj)
{
    Console.WriteLine("Object");
}

public static void method1<T>(T t)
{
    Console.WriteLine("Type T");
}

public static void Main(String args[])
{
    method1("xyz"); //Will print "Type T";
}

这里应该不会有什么冲突吧?

最佳答案

重载通过选择最具体的重载来解决。在这种情况下,method1<string>(string)method1(object) 更具体所以这是选择的过载。

section 7.4.2 of the C# specification中有详细说明.

如果你想选择一个特定的重载,你可以通过显式地将参数转换为你想要的类型来实现。下面将调用method1(object)重载而不是通用的:

method1((object)"xyz"); 

有些情况下编译器不知道选择哪个重载,例如:

void method2(string x, object y);
void method2(object x, string y);

method2("xyz", "abc");

在这种情况下,编译器不知道选择哪个重载,因为这两个重载都明显优于另一个(它不知道将哪个字符串隐式向下转换为对象)。所以它会发出编译错误。

关于c# - 选择了哪个 C# 方法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892243/

相关文章:

c# - 模拟参数的属性更改 - 使用 Moq

c# - 委托(delegate)与行动,C# 中的 Func

.net - NHibernate.Spatial是否与NHibernate 3.0兼容?

delphi - 无法调用类中声明的方法实现通用接口(interface)方法

c# - DbContext 和泛型

c# - 创建 BitmapImage 的背景

c# - 如何在C#中将队列任务添加到线程池

c# - 将数字加倍 - 左移与乘法

c# - IoC 和 .NET 框架

c# - C# .NET 中的重载方法