我有一组我没有写的类,它们是只读的。 比方说,对于例如,这些类是以下物质:C#:具有非多态类的动态多态性
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
这样做是个好主意吗?是否有可能做到这一点?
谢谢。
哦..好的,谢谢。这很整洁,但我想要一些更有活力的东西。 – 2010-07-08 12:27:15
我不认为你会找到扩展方法的动态解决方案。 :(我可以被比我更有创意的人证明是错误的,尽管:) – 2010-07-08 12:45:55
是的,你说得对。但是我意识到Base的Foo()是足够的,因为它可以用于从Base继承的其他类型。 – 2010-07-08 13:07:01