2016-08-21 10 views
2

私のクラス(または基底クラス)のメソッドを基底クラスのメソッドに渡すことができるようにする必要があります。式を介してパラメータを渡す

私は以下のポスタリティについて知っています:私のベースクラスでは、私はpublic void Call(Action action)というメソッドを持っています。これは単にaction()を呼び出して他のものを行います。

しかし、今のところ私はこのメソッドにすべてを入れることができます。 Call(() => string.Format("Some {0}, "text));しかし、私は自分のタイプまたはベースタイプのメソッドを許可したいだけです。

私はpublic void Call(Expression<Func<MyClassType, Action>> expressionToAction)のようなものだと思っていますが、ここで正しい点はありません。

これも可能ですか? expression-paramを使用すると、メソッドがActionを返さなければならないというエラーが発生します。これは完全に私が望むものではありません。

+0

サブクラスの具体的な実装によってオーバーライドされた、基本クラスの単純な仮想メソッドはどうでしょうか? – Tomer

+1

'Func 'は、返された 'Action'について何も保証しません。あなたは実際に何を達成しようとしていますか?なぜこれをやりたいのかという具体的な例を挙げると、おそらく最初にこれを行うより良い方法があります。 – Groo

答えて

1

コンパイル時に「このクラスのメソッドのみ」を達成することはできません。ジェネリックで非ジェネリックなタイプでそれを可能にする制限はありません。

ランタイムチェックで十分な場合は式を渡して(ActionではなくFunc-)、Get the name of a method using an expressionと同様の式の本文を検査します。

関連する問題