クラス名が文字列変数に格納されている c# でクラスのオブジェクトを作成することに関して問題があります。
例えば。文字列 str="パイロット"
As we create object of the class like this
ClassName objectname=new ClassName();
ClassName の代わりに何らかの理由で、クラス名を格納する文字列変数を使用する必要があります。
クラス名が文字列変数に格納されている c# でクラスのオブジェクトを作成することに関して問題があります。
例えば。文字列 str="パイロット"
As we create object of the class like this
ClassName objectname=new ClassName();
ClassName の代わりに何らかの理由で、クラス名を格納する文字列変数を使用する必要があります。
使用Type.GetType(string)
してからActivator.CreateInstance(Type)
:
Type type = Type.GetType(str);
object instance = Activator.CreateInstance(type);
ノート:
Foo.Bar.SomeClassName
Type.GetType(string)
、は現在実行中のアセンブリとをのみ検索しますmscorlib
。他のアセンブリを使用する場合は、アセンブリ修飾名を使用するか、Assembly.GetType(string)
代わりに使用してください。instance
に必要なものの一部であるため、変数の型はである必要がありますこれを行うには、Reflectionを使用します。
var type = Assembly.Load("MyAssembly").GetTypes().Where(t => t.Name.Equals(str));
return Activator.CreateInstance(type);
Activator
あなたは:の使用法を介してこれを行うことができます
var type = "System.String";
var reallyAString = Activator.CreateInstance(
// need a Type here, so get it by type name
Type.GetType(type),
// string's has no parameterless ctor, so use the char array one
new char[]{'a','b','c'});
Console.WriteLine(reallyAString);
Console.WriteLine(reallyAString.GetType().Name);
出力:
abc
String
ここに例があります。完全なネームスペース パスを指定する必要がある場合があります。
Namespace.Pilot config = (Namespace.Pilot)Activator.CreateInstance(Type.GetType("Namespace.Pilot"));