Я только что столкнулся с ситуацией, когда диспетчеризация метода была неоднозначной, и мне было интересно, может ли кто-нибудь объяснить, на каком основании компилятор (.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());
? - person Tomas Aschan   schedule 18.05.2010var
нельзя использовать, потому что он не может присвоить void неявно типизированной переменной - person Sebastian   schedule 18.05.2010