Credo che a questa domanda si comprende meglio con un esempio così qui andiamo:Perché non è possibile inviare dinamicamente un'espressione di accesso di base in C#?
public class Base {
// this method works fine
public void MethodA(dynamic input) {
// handle input
}
}
public class Derived: Base { // Derived was named Super in my original post
// This is also fine
public void MethodB(dynamic input) {
MethodA(input);
}
// This method does not compile and the compiler says:
// The call to method 'MethodA' needs to be dynamically dispatched,
// but cannot be because it is part of a base access expression.
// Consider casting the dynamic arguments or eliminating the base access.
public void MethodC(dynamic input) {
base.MethodA(input);
}
}
Il compilatore afferma chiaramente che il metodo C non è valido a causa del fatto che sta utilizzando l'accesso di base di chiamare il metodo A. Ma perché è questo?
E come si chiama il metodo di base quando si esegue l'override di un metodo con parametri dinamici?
E.g. cosa succede se volevo fare:
public class Base {
// this method works fine
public virtual void MethodA(dynamic input) {
Console.WriteLine(input.say);
}
}
public class Derived: Base { // Derived was named Super in my original post
// this does not compile
public override void MethodA(dynamic input) {
//apply some filter on input
base.MethodA(input);
}
}
Ah, finalmente qualcuno che può rispondere al * perché *. Cosa intendi per "super classe"? Conosco il termine solo come sinonimo di "classe base". –
@ Allon: si trova nello snippet dell'OP. –
@Hans: Oh, pfff, stupido. –