Dispatching Ich traf nur eine Situation, wo eine Methode Dispatch zweideutig war und fragte sich, ob jemand auf welcher Grundlage der Compiler erklären könnte (.NET 4.0.30319) wählt, wasC# Generisches überladene Methode mehrdeutig
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());
}
nennen Überlastung Warum warnt der Compiler mich überhaupt nicht oder warum kompiliert er überhaupt? Vielen Dank für Ihre Antworten.
Was passiert, wenn Sie einen Rückgabewert vom Aufruf erwarten, d. H. 'Var result = concreteB.Add (new ConcreteA());'? –
Weil Ihre generische Methode eine Rückgabe "Typ T" und die andere vom Typ "void" hat. Der Compiler kann zwischen ihnen unterscheiden. – KroaX
der Compiler wird sich beschweren, dass 'var' nicht verwendet werden kann, weil er void nicht der implizit typisierten Variablen – Sebastian