为什么在两个重载匹配时调用泛型方法?
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/