-1
文字列に基づいてオブジェクトの型を判定し、そのオブジェクトの新しいインスタンスを作成する方法はありますか?文字列に基づいてオブジェクトの型を決定し、新しいインスタンスを作成しますか?
私は現在、このような何かをしています:
switch (type_str){
case "Square":
Square S = new Square();
S.DoSomethingSquarey();
DoSomething(S);
break;
case "Circle":
Circle C = new Circle();
C.DoSomethingCircley();
DoSomething(C);
break;
case "Triangle":
Triangle T = new Triangle();
T.DoSomethingTriangley();
DoSomething(T);
break;
}
すべての種類は、基本クラス「形」から継承します:
public static void DoSomething(Shape S){
//Doing Stuff...
}
私が必要となりますので、これはすぐに維持するために、手に負えなくなりますcaseステートメントに形状を継続的に追加する。可能であれば、私は次のようなことをしたいと思います:
Type ShapeType = Type.GetType("Square");
ShapeType X = new ShapeType();
DoSomething(X);
これはコンパイル時に問題を引き起こします。このケースステートメントを単純化する別の方法はありますか?
ありがとうございます。
[Activator.CreateInstance](http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx)のように? – DavidG
Reflectionもあります。これはここで答えられました:http://stackoverflow.com/questions/540066/calling-a-function-from-a-string-in-c-sharp – CDove
文字列として要件を比較するのはなぜですか?一般的なコードで[magic strings](https://en.wikipedia.org/wiki/Magic_number_(プログラミング)#Unnamed_numerical_constants)を使用することはお勧めしません。文字列の代わりに[種類](https://msdn.microsoft.com/en-us/library/58918ffs.aspx)を使用すると、実行しようとしていることは何度も簡単になります。 –