2016-10-18 2 views
2

私はC#をかなり新しくしています。まだインスタンス化のないクラスの関数のハンドルを取得します

私がしたいことは畳み込まれたように見えます。 まず、後で実行するためにいくつかの関数を扱いたいとします。私は、次の方法でこれを達成することができることを知っている:

List<Action> list = new List<Action>(); 
list.Add(() => instanceA.MethodX(paramM)); 
list.Add(() => instanceA.MethodY(paramN, ...)); 

for(Action a in list) { 
    a(); 
} 

しかし、私は、対応する関数を呼び出すとき、それが存在することを知っているinstanceAオブジェクトがまだ存在しない場合は何が、? MethodXとMethodYは外部ライブラリにあり、私は変更したくないです。

-why:この状況について考えてみましょう。クラスAには100個のメソッドがあり、クラスAの状態によってそれぞれ異なる浮動小数点が返されます。しかし、他の状態によっては、最初の5つのメソッドだけにアクセスすることも、1つ目のメソッドと4つ目のメソッドだけにアクセスすることもできます。このメソッドが適用されるクラスの状態は、時間とともに変化する可能性があります。 私の考えは、100個のメソッドすべてで大きなリストを作成し、そのメソッドに対応するインデックスを使用して、適切なメソッドのみを持つサブリストLLを作成することでした(たとえば、[1,2,3,4,5]、または[1,4])。 それでは、オブジェクトAが作成されたら、サブリストLLのさまざまなメソッドを、オブジェクトAによって呼び出されたように、何とか実行します。

これを達成する方法はありますか?あなたは、インスタンスに渡す方法を実行したいときに

lst.Add(x => x.Method1()); 
lst.Add(x => x.Method2()); 

+1

は、これらのインスタンスメソッドまたは静的メソッドはありますか?あたかもそれらがインスタンスメソッドであるかのように記述していますが、この例は静的メソッドに似ています。 [mcve]が本当に助けてくれるでしょう。 –

+0

残念ながら、それらは静的メソッドではなく、静的メソッドにすることはできません。たぶん、例が機能しない、私はそれを試していない:私はちょうどここでは、関数ハンドルのリストを作成するように見えた何かを貼り付けた。 – Vaaal88

+0

.NETの命名規則に従って、質問をインスタンスメソッドとして表示してください。 –

答えて

5

あなたは次のように追加し、List<Action<YourClass>>を使用することができます

lst[0](theInstance); 
+0

はい、私はそれも最高の答えになると思っています...しかし、私はOPがコミットする前に質問を明確にするのを待っています。 –

+0

これは私が探していたものです。どうもありがとうございました。 – Vaaal88

関連する問題