Which C# method overload is chosen?

后端 未结 4 1518
没有蜡笔的小新
没有蜡笔的小新 2020-12-10 01:23

Why is the generic method called when both overloads would match?

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

public stati         


        
4条回答
  •  时光取名叫无心
    2020-12-10 02:12

    Overloads are resolved by choosing the most specific overload. In this case, method1(string) is more specific than method1(object) so that is the overload chosen.

    There are details in section 7.4.2 of the C# specification.

    If you want to select a specific overload, you can do so by explicitly casting the parameters to the types that you want. The following will call the method1(object) overload instead of the generic one:

    method1((object)"xyz"); 
    

    There are cases where the compiler won't know which overload to select, for example:

    void method2(string x, object y);
    void method2(object x, string y);
    
    method2("xyz", "abc");
    

    In this case the compiler doesn't know which overload to pick, because neither overload is clearly better than the other (it doesn't know which string to implicitly downcast to object). So it will emit a compiler error.

提交回复
热议问题