質問

クラスのオブジェクトを作成するコードはどのようになりますか?

string myClass = "MyClass";

上記のタイプを呼び出してから、

string myMethod = "MyMethod";

その物体について?

役に立ちましたか?

解決

例ですが、エラーチェックはありません:

using System;
using System.Reflection;

namespace Foo
{
    class Test
    {
        static void Main()
        {
            Type type = Type.GetType("Foo.MyClass");
            object instance = Activator.CreateInstance(type);
            MethodInfo method = type.GetMethod("MyMethod");
            method.Invoke(instance, null);
        }
    }

    class MyClass
    {
        public void MyMethod()
        {
            Console.WriteLine("In MyClass.MyMethod");
        }
    }
}

各ステップは慎重にチェックする必要があります。型が見つからない場合、パラメータのないコンストラクターがない場合、メソッドが見つからない場合、間違った引数の型で呼び出している場合があります。

注意すべき点が 1 つあります:Type.GetType(string) には、現在実行中のアセンブリまたは mscorlib 内にない限り、型のアセンブリ修飾名が必要です。

他のヒント

.NET を使用して動的オブジェクトの作成と呼び出しを簡素化するライブラリを作成しました。ライブラリとコードは Google コードでダウンロードできます。 レイトバインディングヘルパープロジェクトには、 使い方が載ったWikiページ, 、またはこれを確認することもできます コードプロジェクトの記事

私のライブラリを使用すると、例は次のようになります。

IOperationInvoker myClass = BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass");
myClass.Method("MyMethod").Invoke();

またはさらに短くしてください:

BindingFactory.CreateObjectBinding("MyClassAssembly", "MyClass")
     .Method("MyMethod")
     .Invoke();

流暢なインターフェースを使用しており、この種の操作を本当に簡素化します。お役に立てば幸いです。

以下では、パブリック・コンストラクタと、いくつかの値を返すが、パラメータを取らないパブリックメソッドを有するオブジェクトを想定している。

var object = Activator.CreateInstance( "MyClass" );
var result = object.GetType().GetMethod( "MyMethod" ).Invoke( object, null );

あなたのクラスは、あなたの実行アセンブリであると仮定すると、あなたのコンストラクタとあなたの方法は、パラメータなしでます。

Type clazz = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyClass");

System.Reflection.ConstructorInfo ci = clazz.GetConstructor(new Type[] { });
object instance = ci.Invoke(null); /* Send parameters instead of null here */

System.Reflection.MethodInfo mi = clazz.GetMethod("MyMethod");
mi.Invoke(instance, null); /* Send parameters instead of null here */
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top