2

クラス名が文字列変数に格納されている c# でクラスのオブジェクトを作成することに関して問題があります。

例えば。文字列 str="パイロット"

As we create object of the class like this
ClassName objectname=new ClassName();

ClassName の代わりに何らかの理由で、クラス名を格納する文字列変数を使用する必要があります。

4

4 に答える 4

2

使用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に必要なものの一部であるため、変数の型はである必要があります
于 2013-03-01T18:43:53.750 に答える
0

これを行うには、Reflectionを使用します。

var type = Assembly.Load("MyAssembly").GetTypes().Where(t => t.Name.Equals(str));
return Activator.CreateInstance(type);
于 2013-03-01T18:44:08.290 に答える
0

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
于 2013-03-01T18:44:38.113 に答える
0

ここに例があります。完全なネームスペース パスを指定する必要がある場合があります。

Namespace.Pilot config = (Namespace.Pilot)Activator.CreateInstance(Type.GetType("Namespace.Pilot"));
于 2013-03-01T18:43:23.953 に答える