У меня есть набор классов, которые я не писал, и они только для чтения.Скажем, для примера, что эти классы следующие:
public class Base { }
public class B : Base { }
public class C : B { }
public class D : Base { }
Я хочу добавить метод Foo()
для всех этих классов, я использую методы расширения:
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");
}
}
Как видите, я пытаюсь использовать ключевое слово dynamic
, ожидая, что оно узнает реальный тип моего объекта и вызовет его метод Foo()
.Но ... dynobj.Foo()
всегда терпит неудачу.
static void Main(string[] args) {
List<Base> list = new List<Base>();
list.Add(new B());
list.Add(new C());
list.Add(new D());
list.ForEach(x => x.Foo());
}
Я знаю, что могу использовать шаблон адаптера, но у меня действительно слишком много классов.с dynamic
?Можно ли сделать эту работу?
Спасибо.