假设我有这些类层次结构:
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);
}
}
因为我无法控制类层次结构(它来自第 3 方程序集)。我只能更改实用程序类。我怎样才能避免这种调整?
由于我坚持使用 .Net 3.5 SP1,因此我无法使用动态。