この種のコードの用語はわかりませんが、括弧の後に変数をインスタンス化できるかどうかを知りたいのですが、リフレクションを使用しています。
XMLファイルからロードされるマップがあります。これは(int X、int Y、string S)のコレクションであり、X、Yはある地形の位置であり、Sは地形のタイプを表す文字列です。文字列と関連するタイプの間を渡すための辞書があります。たとえば、1つのキーと値のペアは「Tree」、typeof(Tree)の場合があります。
リフレクションを使用する場合、パラメーターを使用してインスタンス化できることはわかっていますが、私が快適に使用できる唯一の方法は、Activator.CreateInstance(Type t)を使用すること、つまり空のコンストラクターを使用することです。
マップをハードコーディングした場合、元々は次のようにインスタンス化されていました(i、j forループ内):
case: "Tree"
world.Add( new Tree(i,j) );
リフレクションと保存ファイルについて考え始めたときに、これを次のように変更しました。
world.Add( new Tree() { X = i, Y = j }
ただし、これはリフレクションでは機能しないことに気付いたので、次のことを行う必要があります(TreeはTerrainから継承し、ディクショナリはXML保存データ文字列をタイプに変換するだけです)。
Type type = dictionary[dataItem.typeAsString];
Terrain t = (Terrain)Activator.CreateInstance(type);
t.X = i;
t.Y = j;
world.Add(t);
私はこれを次のようなものを使用して行いたいと思います
Type type = dictionary[dataItem.typeAsString];
world.Add((Terrain)Activator.CreateInstance(type) { X = i, Y = j }
このようなショートカットはありますか?ワールドを編集できない場合は、追加してXとYを取得し、そこにある地形にキャストしてこれらの変数にアクセスできると思いますが、a)この{var1 = X、var2=Y}プログラミングの名前についてはまだ興味があります。 、およびb)反射を使用するときに類似したものが存在するかどうか。