2016-06-26 12 views
0

こんにちは、リフレクションによってメソッドを呼び出そうとしています。しかし、文字列、ブールなどは動作していません。リターンタイプもあります。私は有用な参考文献を見つけることができませんでした。パラメータがリフレクションパスを介して呼び出され、戻り値が返される

私はいくつかのテストメソッドを呼び出すために使用したテストクラスを持っています。すべての無効なものがうまくいきました。他の人は全く電話していませんでした。私の主な方法で

internal class Test 
{ 
    public static void Print() 
    { 
     Console.WriteLine("Test"); 
     Console.WriteLine("Testing an invoke method"); 
    } 

    public static void CalcData() 
    { 
     Console.WriteLine("Test"); 
    } 

    public static void DoSomething(int c, float f) 
    { 
     Console.WriteLine("Test"); 
    } 

    public static string TestString(string s, int p, char f) 
    { 
     return "Happy Days"; 
    } 
} 

私はt.GetMethod("Print").Invoke(t, null);

を呼ぶだろうが、私は、パラメータを渡したり、戻り値の型を取得するために呼び出す方法がわからないと思います。

これについてのいくつかの洞察は非常に認められるでしょう。

+0

[名前でメソッドを呼び出すためにリフレクションを使用する方法]の可能性のある重複http://stackoverflow.com/questions/3110280/how-to-使用法 - 呼び出し - メソッド - 名前による) –

答えて

2

はあなたがparametersobject[]にメソッドのパラメータを渡す必要がMethodInfo.Invoke

public object Invoke(
    object obj, 
    object[] parameters 
) 

の署名を見てください。このメソッドはobjectを返します。結果の型にキャストするだけでよいことに注意してください。

TestStringへの呼び出しは次のようになります(

var parameters = new object[]{"A string", 10, 'a'}; 
string result = (string) t.GetMethod("Print").Invoke(t, parameters); 
+0

これは完璧に働いてくれてありがとうございます。 私は手を調整しなければなりませんでしたが、今のようにいくつかの制限を設けてネットワーク上でどのような方法でも呼び出すことができます=) – Krazor

関連する問題