我遇到了一个方法分派不明确的情况,想知道编译器(.NET 4.0.30319)选择哪个重载方法的依据是什么。请问有人能解释一下吗?
interface IfaceA
{
}
interface IfaceB<T>
{
void Add(IfaceA a);
T Add(T t);
}
class ConcreteA : IfaceA
{
}
class abstract BaseClassB<T> : IfaceB<T>
{
public virtual T Add(T t) { ... }
public virtual void Add(IfaceA a) { ... }
}
class ConcreteB : BaseClassB<IfaceA>
{
// does not override one of the relevant methods
}
void code()
{
var concreteB = new ConcreteB();
// it will call void Add(IfaceA a)
concreteB.Add(new ConcreteA());
}
无论如何,为什么编译器不会警告我,甚至为什么它可以编译通过? 非常感谢任何回答。
var result = concreteB.Add(new ConcreteA());
,会发生什么? - Tomas Aschanvar
。 - Sebastian