2

私はReflectionの例を2日間読んでいますが、必要なものに合うようにすべてをつなぎ合わせることができないようです。実際、「System.Reflectionを使用する」がグレー表示されていることに気付くまで、リフレクションを使用していると思っていました。:-)

クラス名とそれに含まれるメソッドを含むxmlファイルがあります。メソッドの順序や名前さえも変更される可能性があります。それらを読んだら、実行できるようにしたいと思います。簡単そうです。

私は次のテストコードを持っています:

    // myClassName = "namespace.TransactionServices"
    Type tb = Type.GetType(myClassName);

    // Classes will always have the same constructor
    object classInstance = Activator.CreateInstance (
        tb, 
        new object[] 
        {
            authorization.apiKey, 
            authorization.userName, 
            testData.servicesEndPoint
        });

    //Grab the method I want

    //myMethodName = "GetVersion"
    MethodInfo mymethod = tb.GetMethod(myMethodName);
    // no parameters for this method call
    object result = mymethod.Invoke(classInstance, null);

tbはnullです。クラスを作成するための正しいAPIを取得しようとしていたのですが、残りの部分が有効かどうかさえわかりません。

助言がありますか?

ありがとう

編集:名前空間を追加しました。Activator.CreateInstanceは、コンストラクターが見つからないというエラーを返しています。そこにあります。

4

3 に答える 3

3

クラス名を解決するには、クラス名が完全に修飾されている必要があります(名前空間と、ほとんどの場合、アセンブリを含む)。クラスが現在実行中のアセンブリにあることがわかっている場合は、Assembly.GetExecutingAssembly() .GetType()を使用できます。

于 2011-04-05T18:51:15.670 に答える
2

名前空間を含む完全なクラス名を指定してもよろしいですか?名前空間がないと、結果はnullになります。

于 2011-04-05T18:50:29.987 に答える
0

GetTypeの場合、完全修飾名を指定する必要があります。を使用して既存のオブジェクトに対して取得できます

MyObject.GetType().AssemblyQualifiedName;
于 2011-04-05T18:53:48.700 に答える