理由は聞かないでくださいが、次のことをする必要があります。
_string ClassName = "SomeClassName";
object o = MagicallyCreateInstance("SomeClassName");
_
これを行う方法がいくつあるか、どのシナリオでどのアプローチを使用するかを知りたい。
例:
Activator.CreateInstance
_Assembly.GetExecutingAssembly.CreateInstance("")
この質問は、自由に話し合うことを意図したものではありません。これを達成できる方法は非常に多くあると確信しているからです。
メソッドは次のようになります。
private static object MagicallyCreateInstance(string className)
{
var Assembly = Assembly.GetExecutingAssembly();
var type = Assembly.GetTypes()
.First(t => t.Name == className);
return Activator.CreateInstance(type);
}
上記のコードは次のことを前提としています。
Assembly
を必要なものに変更するだけです)更新:
特定のクラスから派生する(同じアセンブリで定義されている)すべてのクラスを取得する方法は次のとおりです。
private static IEnumerable<Type> GetDerivedTypesFor(Type baseType)
{
var Assembly = Assembly.GetExecutingAssembly();
return Assembly.GetTypes()
.Where(baseType.IsAssignableFrom)
.Where(t => baseType != t);
}
Activator.CreateInstance(Type.GetType("SomeNamespace.SomeClassName"));
または
Activator.CreateInstance(null, "SomeNamespace.SomeClassName").Unwrap();
コンストラクター引数を指定できるオーバーロードもあります。