この質問をするのは私が最初ではないはずです。しかし、私の問題に対する解決策はまだ見つかりませんでした。正確な用語を知らないだけかもしれません。
現在、さまざまなタイプのゲーマーを処理する必要があるプログラムを (c# で) プログラミングしています。
すなわち:
public class Gamer {
public int ID { set; get; }
public string Name { set; get; }
public Gamer(int ID, string Name)
{
this.ID = ID;
this.Name = Name;
}
次に、さまざまな属性を持つさまざまなタイプのプレーヤー (チェス、囲碁、ゴルフなど) を分離しています。
public class ChessPlayer : Gamer {
public int ELORank { set; get; }
public ChessPlayer(int ID, string Name, int ELORank)
{
this.ID = ID;
this.Name = Name;
this.ELORANK = ELORank;
}
}
public class TennisPlayer : Gamer {
public int SinglesRank { set; get; }
public int DoublesRank { set; get; }
public bool LeftHanded { set; get; }
public TennisPlayer(int ID, string Name,
int SinglesRank, int DoublesRank bool LeftHanded)
{
this.ID = ID;
this.Name = Name;
this.SinglesRank = SinglesRank;
this.DoublesRank = DoublesRank;
this.LeftHanded = LeftHanded;
}
}
次に、現在参加しているゲーマーを記述する静的クラスがあります。
public static class Game{
public static int Type { set; get; } //0 = Chess, 1 = Tennis
public static var Gamer { set; get; }
}
ButtonClickに書くことができるように:
private void ButtonClick (Sender object, Event e)
{
ArrayList Participants = new ArrayList;
switch (Game.type)
{
case 0: //Chess
{
[...] //Add chess player to ArrayList
break;
Game.Gamer = Participants.ToArray(typeof(ChessPlayer)) as ChessPlayer[];
}
case 1: //Tennis
{
[...] //Add tennis player to ArrayList
Game.Gamer = Participants.ToArray(typeof(TennisPlayer)) as TennisPlayer[];
break;
}
}
}
まあやりたいけど、
public static var Gamer { set; get; }
クラス宣言に var を含めることができないため、許可されていません。
そのため、私は現在、ChessPlayer や TennisPlayer などのすべてのコンストラクターと属性を持つ AllGamer クラスを使用しています。そしてそれは働いています。しかし、私のオリジナルのアイデアの方が良いと思います。
私は c# を初めて使用し、これが初めての実際の OOP プロジェクトです。ですから、何かアイデアがあれば、聞いたり読んだりしていただければ幸いです。未決定の型を使用したり、実行時に型を決定したりする可能性はありますか (「var」のようなもの)?