1

c#で文字列変数によってクラスを初期化するには? 文字列を使用してクラスを作成する方法をすでに見つけました

私がすでに持っているものは次のとおりです。

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);

私がやりたいことは、たとえば、このクラスで関数を呼び出すことです:

class.foo();

これは可能ですか?もしそうならどうですか?

4

5 に答える 5

4
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);
于 2010-12-20T16:22:54.930 に答える
2

クラスが Foo メソッドを公開するインターフェイスまたは基本クラスを実装していると想定できる場合は、必要に応じてクラスをキャストします。

public interface IFoo
{
   void Foo();
}

次に、呼び出しコードで次のことができます。

var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);

yourType.Foo();
于 2010-12-20T16:25:33.010 に答える
1

可能ですが、リフレクションを使用するかclass、実行時に適切な型としてキャストする必要があります..

リフレクションの例:

type.GetMethod("foo").Invoke(class, null);
于 2010-12-20T16:22:57.553 に答える
0

Activator.CreateInstanceの型を返しますobject。コンパイル時に型がわかっている場合は、汎用の CreateInstance を使用できます。

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
于 2010-12-20T16:24:32.317 に答える
0
var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

Invoke メソッドの 2 番目の引数はメソッド パラメータです。

于 2010-12-20T16:24:35.433 に答える