c#で文字列変数によってクラスを初期化するには? 文字列を使用してクラスを作成する方法をすでに見つけました
私がすでに持っているものは次のとおりです。
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);
私がやりたいことは、たとえば、このクラスで関数を呼び出すことです:
class.foo();
これは可能ですか?もしそうならどうですか?
c#で文字列変数によってクラスを初期化するには? 文字列を使用してクラスを作成する方法をすでに見つけました
私がすでに持っているものは次のとおりです。
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);
私がやりたいことは、たとえば、このクラスで関数を呼び出すことです:
class.foo();
これは可能ですか?もしそうならどうですか?
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);
object result = yourType.GetMethod("foo")
.Invoke(yourObject, null);
クラスが Foo メソッドを公開するインターフェイスまたは基本クラスを実装していると想定できる場合は、必要に応じてクラスをキャストします。
public interface IFoo
{
void Foo();
}
次に、呼び出しコードで次のことができます。
var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);
yourType.Foo();
可能ですが、リフレクションを使用するかclass
、実行時に適切な型としてキャストする必要があります..
リフレクションの例:
type.GetMethod("foo").Invoke(class, null);
Activator.CreateInstance
の型を返しますobject
。コンパイル時に型がわかっている場合は、汎用の CreateInstance を使用できます。
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
var methodInfo = type.GetMethod("foo");
object result = methodInfo.Invoke(class,null);
Invoke メソッドの 2 番目の引数はメソッド パラメータです。