0

この質問をするのは私が最初ではないはずです。しかし、私の問題に対する解決策はまだ見つかりませんでした。正確な用語を知らないだけかもしれません。

現在、さまざまなタイプのゲーマーを処理する必要があるプログラムを (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」のようなもの)?

4

1 に答える 1

1

ChessPlayer と TennisPlayer はどちらも Gamer であるため、Gamer タイプのプロパティを作成できます。

 public Gamer TheGamer {get;set;}

別の方法は、を定義してInterfaceIGamerプレイヤーにそのインターフェースを実装させることです。

 public IGamer TheGamer {get;set;}
于 2012-09-02T14:38:10.870 に答える