これらのクラス階層があるとしましょう:
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
は、パラメーターのない Update メソッドがあります。
あらゆる種類のオブジェクトで動作し、プロセスの最後に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に固執しているので、動的を使用できません。