【发布时间】:2013-10-29 02:42:30
【问题描述】:
考虑在 .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
我们可以使用反射或其他一些技术来做到这一点而无需重复代码吗?
【问题讨论】:
标签: c# reflection inversion-of-control