2011-07-19 6 views
3

私は、クラスのインスタンス全体を反復処理し、パブリック仮想とマークされたすべてのメソッドを見つけるプロジェクトを用意しています。次に、クラスのインスタンスをオーバーライドして、メソッドが呼び出されたときに別のコードセットを呼び出すことができるようにします。リフレクションを使用してクラス内のすべてのメソッドを見つける方法はわかっていますが、仮想メソッドをオーバーライドする方法を理解することはできません。リフレクションを使用してすべてのパブリック仮想メソッドを見つけ、オーバーライドを提供します

私は基本的にはプロキシオブジェクトを使用していますが、メソッドを呼び出すときに、そのオブジェクトのメソッドを呼び出す必要があります。手動で各メソッドをオーバーライドすることでこれを行うことができますが、もう少し動的なものを使用したいと思います。

+0

興味深い質問。それはかなりハックだ。どのような目的のためにこれをしたいですか? –

答えて

2

MethodBaseはIsVirtual Propertyです。

MethodBase m = typeof(MyClass).GetMethod("MyMethod"); 
if (m.IsVirtual) 
    // yada-yada-yada... 
+0

これで代理人を代用する方法が必要です。つまり、誰かがそれを呼び出すと、代わりにデリゲートを実行し、メソッド呼び出しのすべての引数をデリゲートに渡したいとします。 – user852436

2
typeof(MyClass) 
    .GetMethods(BindingFlags.Public | BindingFlags.Instance) 
    .Where(m => m.IsVirtual); 
+0

さて、私はデリゲートのためにそのメソッドを置き換える方法が必要です。つまり、誰かがそれを呼び出すと、代わりにデリゲートを実行し、メソッド呼び出しのすべての引数をデリゲートに渡したいとします。 – user852436

+0

@user:新しい質問を投稿してください。 ['DynamicObject.TryGetMember()'](http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.trygetmember.aspx)も参照してください。 – abatishchev