複製代碼我有這些結構如何避免訪問屬性,而無需使用反射
class A : IFoo {
Foo(){
//do something
}
IList<B> Bs {get;set;}
IList<C> Cs {get;set;}
}
class B : IFoo {
Foo(){
//do something
}
IList<D> Ds {get;set;}
}
class C : IFoo {
Foo(){
//do something
}
}
class D : IFoo {
Foo(){
//do something
}
}
class Helper{
Bar(A a){
a.Foo();
Bar(a.Bs);
Bar(a.Cs);
}
Bar(IList<B> bs)
{
foreach(var b in bs)
{
Bar(b);
}
}
Bar(B b)
{
b.Foo();
Bar(b.Ds);
}
Bar(IList<C> cs)
{
foreach(var c in cs)
{
Bar(c);
}
}
Bar(C c)
{
c.Foo();
}
Bar(IList<D> ds)
{
foreach(var d in ds)
{
Bar(d);
}
}
Bar(D d)
{
d.Foo();
}
}
interface IFoo {
void Foo();
}
正如所看到的大量的代碼被重複Helper
類(即方法Bar
),用於不同類型的A,B,C,IList<A>,IList<B>,IList<C>
。此外,當一個新的列表屬性添加到類我需要找回並更改助手類,它在某種程度上是與打開/關閉主要矛盾。
我知道如何使用Reflection
來解決這個問題,但我正在尋找另一種聰明,整潔的方式來解決這個問題,而不是使用反射。
我可以自由地添加新Interface
秒,但沒有基類
任何建議將讚賞
看起來很複雜嗎?你想達到什麼目的?如果你不想'反射',可以使用'dynamic'或'expando object' – ANewGuyInTown
@ANewGuyInTown即使動態問題仍然存在,我需要保留所有的Helper類結構,並在添加新類時複製粘貼代碼 – RezaRahmati
'IFoo'接口上是否存在'Foo()'方法? – StuartLC