J'ai un ensemble de classes que je n'ai pas écrites, et elles sont en lecture seule. Disons que, pour l'exemple, que ces classes sont les suivantes:C#: polymorphisme dynamique avec des classes non polymorphes
public class Base { }
public class B : Base { }
public class C : B { }
public class D : Base { }
Je veux ajouter une méthode Foo()
sur toutes ces classes, je suis en utilisant des méthodes d'extension:
public static class Extensions {
public static void Foo(this Base obj) {
dynamic dynobj = obj;
try {
dynobj.Foo();
}
catch (RuntimeBinderException ex) {
Console.WriteLine(ex.Message);
}
}
public static void Foo(this B b) {
Console.WriteLine("Foo in B");
}
public static void Foo(this C c) {
Console.WriteLine("Foo in C");
}
}
Comme vous peut voir, j'essaie d'utiliser le mot-clé dynamic
, s'attendant à connaître le type réel de mon objet et d'appeler sa méthode Foo()
. Mais ... dynobj.Foo()
échoue toujours. Je sais que je pourrais utiliser le modèle d'adaptateur, mais j'ai vraiment trop de classes.
Est-ce une bonne idée de le faire avec dynamic
? Est-il possible de faire ce travail?
Merci.
Oh, d'accord, merci. C'est bien, mais je voulais quelque chose d'un peu plus dynamique. –
Je ne pense pas que vous trouverez une solution dynamique aux méthodes d'extension. :(Je pourrais avoir tort par quelqu'un de plus créatif que moi, cependant :) –
Oui, vous avez raison. Mais j'ai réalisé que Foo() de Base est suffisant car il sera disponible pour tous les autres types qui héritent en quelque sorte de Base. –