比方說,我有這些類層次結構:在這種情況下,我可以避免反思嗎?
public abstract class Parent {
}
public class A : Parent {
public void Update() { }
}
public class B : Parent {
public void Update() { }
}
public class C : Parent {
public void Update() { }
public void Update(bool force) { }
}
正如你所看到的,Parent
所有後代有一個更新方法,不帶參數。
我想創建一個實用程序類,它可以與任何種類的Parent
對象一起使用,並在過程結束時調用Update
。我相信Update方法將被執行,所以我寫了這個代碼:
public class ParentUtilities {
private static readonly Dictionary<Type, MethodInfo> g_UpdateMethods = new Dictionary<Type, MethodInfo>{
{ typeof(A), typeof(A).GetMethod("Update", new Type[] {})},
{ typeof(B), typeof(B).GetMethod("Update", new Type[] {})},
{ typeof(C), typeof(C).GetMethod("Update", new Type[] {})}
};
public static void DoSomething(Parent p)
{
CalculateTheMeaningOfTheLife(p);
g_UpdateMethods[p.GetType()].Invoke(p, null);
}
}
由於我沒有跨類層次(這是一個第三方組件)控制。我只能改變實用程序類。我怎樣才能避免這種調整?
由於我堅持使用.Net 3.5 SP1,我無法使用動態。
什麼替代? – marko
正如我所說的,我無法控制類層次結構(它來自第三方程序集)。 Parent和Descendants類是在第三方程序集中,但我的實用程序類來自我正在編寫的代碼。 –
您可以構建委託來避免反射的調用。 – leppie