Je pense que cette question est mieux comprise par un exemple si on y va:Pourquoi une expression d'accès de base ne peut-elle pas être distribuée dynamiquement 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);
}
}
Le compilateur indique clairement que la méthode C est invalide en raison du fait qu'il utilise un accès de base à appeler la méthode A. Mais pourquoi est-ce?
Et comment appeler la méthode de base lors du remplacement d'une méthode par des paramètres dynamiques?
E.g. si je voulais faire:
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, enfin quelqu'un qui peut répondre à la * pourquoi *. Qu'entendez-vous par "Super classe"? Je connais seulement le terme comme étant synonyme de "classe de base". –
@Allon: c'est dans l'extrait de l'OP. –
@Hans: Oh, pfff, idiot moi. –