Creo que esta pregunta se entiende mejor con un ejemplo así que aquí vamos:¿Por qué no se puede distribuir dinámicamente una expresión de acceso base en 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);
}
}
El compilador establece claramente que el método C no es válida debido al hecho de que está usando el acceso base de llamar al método A. Pero por qué ¿es eso?
¿Y cómo se llama al método base al anular un método con parámetros dinámicos?
E.g. ¿y si lo que quería hacer:
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);
}
}
Ahh, finalmente alguien que puede responder el * por qué *. ¿Qué quieres decir con "Súper clase"? Solo sé que el término es sinónimo de "clase base". –
@Allon: está en el fragmento del OP. –
@Hans: Ah, pfff, tonto de mí. –