0
考虑在.NET框架中使用类层次结构定义的名称空间。反思可以覆盖基类中的虚函数
namespace OfficialDotnetNS
{
namespace officialNS.Bases
{
public class BaseOfA : IFakeA, IFakeB
{
protected void Driver(Stream stream){ this.DriveFoo(stream); };
protected internal virtual void DriveFoo(Stream stream);
}
}
public abstract class A : officialNS.Bases.BaseofA
{
protected internal override void DriveFoo(Stream stream){ this.Foo(stream); };
protected virtual void Foo(String stream);
}
public class B : A {}
public class C : A {}
public class D : A {}
// and 50+ similar classes derived from A
}
我有一个BaseofA
对象和当我打电话Driver(stream)
它随后调用的A
Foo
和合适的派生类的。
现在,我要重写Foo()
与相同的代码,所以从A
继承该自定义实现派生的所有类。
一种方法是编写自定义包装为每个类:
public class CustomB : B
{
protected override void Foo(Stream stream)
{
stream.Position = 12;
base.Foo(stream);
}
}
public class CustomC : C
{
protected override void Foo(Stream stream)
{
stream.Position = 12;
base.Foo(stream);
}
}
public class CustomD : D
{
protected override void Foo(Stream stream)
{
stream.Position = 12;
base.Foo(stream);
}
}
//.. for all 50+ classes
我们能做到这一点使用反射或不重复的代码一些其他的技术?
你可以指出DynamicProxy的特定功能,专注于冲压的覆盖功能,所有*兄弟班*? – Annie
@Annie:我添加了一些代码来演示。 – spender
谢谢,它清除了几乎所有的东西。只是有点好奇心。我试图调用'BaseOfA'类的'DriverFoo',它最终会''A'类的'Foo'。在你的例子中,如果'A'有一个父类,你将如何从A的基地选择A的子女? – Annie