假设我有两个C#方法的重载版本:
void Method( TypeA a ) { } void Method( TypeB b ) { }
我用以下方法调用该方法:
Method( null );
调用该方法的哪个重载?我该怎么做才能确保调用特定的重载?
这取决于TypeA和TypeB。
TypeA
TypeB
null
有关详细规则,请参见C#3.0规范的7.4.3.4节。
这是一个模棱两可的例子。这是TypeB从派生的TypeA,这意味着存在从TypeB到的隐式转换TypeA,反之亦然。因此,使用了重载使用TypeB:
using System; class TypeA {} class TypeB : TypeA {} class Program { static void Foo(TypeA x) { Console.WriteLine("Foo(TypeA)"); } static void Foo(TypeB x) { Console.WriteLine("Foo(TypeB)"); } static void Main() { Foo(null); // Prints Foo(TypeB) } }
通常,即使面对另一个模棱两可的调用,也要确保使用特定的重载,只需进行强制转换:
Foo((TypeA) null);
要么
Foo((TypeB) null);
请注意,如果这涉及到声明类中的继承(即,一个类正在重载由其基类声明的方法),那么您将陷入另一个问题,您需要转换方法的目标而不是参数。