public enum EnumTest
{
EnumEntry
}
public class TestClass
{
public string FunctionMember(string s, EnumTest t = EnumTest.EnumEntry)
{
return "Normal";
}
public string FunctionMember<T>(T t)
{
return "Generic";
}
}
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
Console.WriteLine(t.FunctionMember("a"));
}
}
这将打印“通用”。删除, EnumTest t = EnumTest.EnumEntry
使其打印“正常”。为什么通用函数成员选择的是非泛型成员?
然而标准似乎是很清楚,从14.4.2.2更好的函数成员第一鉴别要应用是:
- 如果MP和MQ的一个不通用,但其他是通用的,那么非通用更好。
我错过了什么或编译器错误?
你在看C#4.0规范吗?我怀疑你正在查看一个较旧的规范,它没有提及可选参数,因为那些只是在C#4.0中引入的。 – CodesInChaos 2013-02-15 13:08:19
我相信你的方法有不同的签名。你是否尝试过,例如传递int或其他东西? – 2013-02-15 13:09:22
@Codes:我没有,但4.0规范说了同样的事情,只是它在7.5.3.2。 – 2013-02-15 13:11:30