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