#概要
基底クラス(スーパークラス)から、派生クラス(サブクラス)に任意の名前のメソッドが使えたらそれを呼び出すコードです。本来は基底クラスのほうにメソッドを用意しておいて、派生クラスでオーバーライドすべきですが...
ミソは、基底クラスのthisは、(派生されていたら)派生クラスのオブジェクトを示す※ことです。常識かもしれませんが...
#コード1
var m = this.GetType().GetMethod("MethodName");
if (m != null)
m.Invoke(this, new object[] { /* パラメータが必要であればここに */ });
##ミソ
※次のようなコードで、MyClass のインスタンスからGetClassNameメソッドを呼び出すと、MyClass が返されます。
public class BaseClass
{
/// ...
public string GetClassName()
{
return this.GetType().Name;
}
/// ...
}
public class MyClass : BaseClass
{
/// ...
}
//
//var obj = new MyClass();
//var ret = obj.GetClassName();
//
//ret ==> "MyClass"
//
#コード2
dynamic型が利用できれば、こちらにキャストして呼び出します。そのメソッドが確実に存在する場合には、こちらのほうがずっとシンプルに書けます(yubaさん有難う御座います)
((dynamic)this).MethodName( /* パラメータが必要であればここに */ );