比方说,我有这些类层次结构:在这种情况下,我可以避免反思吗?
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