2017-11-21 7 views
-2

ここで私の考えはクラスランナーのインスタンスをさらに作成することですが、これを実行して作成したすべてのオブジェクトをリストすると、それらはすべて最後に作成されたものです。私はこれがオブジェクトが参照型であることを理解しています。しかし、私はこれを行うことができる方法はありますか?より多くのオブジェクトを動的に作成する

class Marathon 
{ 
    static void Main(string[] args) 
    { 
     List <Runner> athleteList = new List<Runner>(); 
     int opcao=0; 
     while (true) 
     { 
      Console.WriteLine("1-Registar Atleta Profissional\n2-Registar Atleta Amador\n3-Registar Fancy Dresser\n4-Listar Atletas Inscritos\n5-Registar Fim de prova de um atleta\n6-Sair"); 
      opcao = Convert.ToInt32(Console.ReadLine()); 
      switch(opcao) 
      { 
       case 1: 
        Console.WriteLine("Introduza o numero do Atleta:"); 
        int numeroAtletaP = Convert.ToInt32(Console.ReadLine()); 
        Console.WriteLine("Introduza o ranking to atleta:"); 
        int rankingAtletaP = Convert.ToInt32(Console.ReadLine()); 
        athleteList.Add(new Professional(rankingAtletaP,numeroAtletaP)); 

        break; 

       case 2: 
        SponsorshipForm spFa = new SponsorshipForm(); 
        Console.WriteLine("Introduza o numero do Atleta:"); 
        int numeroAtletaA = Convert.ToInt32(Console.ReadLine()); 
        athleteList.Add(new Amateur(numeroAtletaA,spFa)); 
        break; 

       case 3: 
        SponsorshipForm spfFD = new SponsorshipForm(); 
        Console.WriteLine("Introduza o numero do Atleta:"); 
        int numeroAtletaFD = Convert.ToInt32(Console.ReadLine()); 
        Console.WriteLine("Costume:"); 
        string costume =Console.ReadLine(); 
        athleteList.Add(new FancyDresser(numeroAtletaFD, spfFD, costume)); 
        break; 

       case 4: 
        foreach (Runner athlete in athleteList) 
        { 
         Console.WriteLine(athlete.toString()); 
        } 
        break; 

       case 5: 
        Console.WriteLine("Introduza o numero do Atleta:"); 
        int numeroAtleta = Convert.ToInt32(Console.ReadLine()); 
        foreach (Runner athlete in athleteList) 
        { 
         if (numeroAtleta == athlete.getNumber()) 
         { 
          Console.WriteLine("Hora chegada:"); 
          int horaChegada = Convert.ToInt32(Console.ReadLine()); 
          Console.WriteLine("Minuto chegada:"); 
          int minutoChegada = Convert.ToInt32(Console.ReadLine()); 
          Console.WriteLine("Segundo chegada:"); 
          int segundoChegada = Convert.ToInt32(Console.ReadLine()); 
          athlete.finish(horaChegada, minutoChegada, segundoChegada); 
         } 
         else 
         { 
          Console.WriteLine("Atleta não existe."); 
         } 
        } 
        break; 

       case 6: 
        System.Environment.Exit(1); 
        break; 

       default: 
        Console.WriteLine("Opcao invalida."); 
        break; 
      } 
     } 
    } 
} 

ランナークラス

​​

プロフェッショナルクラス

namespace Marathon 

{ 
    class Professional : Runner 
    { 
     private int worldranking; 

     public Professional(int worldRanking, int pNumber) : base (number) 
     { 
      number=pNumber; 
      worldranking = worldRanking; 
     } 

     public string toString() 
     { 
      return string.Format("Number: {0}, Finished:{1} Time:{2}:{3}:{4}\nWorld Ranking: {5}", number, finished, hours, minutes, secs, worldranking); 

     } 
    } 
} 

アマチュアクラス

namespace Marathon 

{ 
    class Amateur : Runner 
    { 
     static public SponsorshipForm sponsForm; 

     public Amateur(int aNumber,SponsorshipForm SponsForm) : base(number) 
     { 
      aNumber = number; 
      sponsForm = SponsForm; 
     } 

     public string toString() 
     { 
      return string.Format("Number: {0}, Finished:{1} Time:{2}:{3}:{4}", number, finished, hours, minutes, secs); 

     } 

ファンシードレッサークラス

namespace Marathon 

{ 
    class FancyDresser : Amateur 
    { 
     string costume; 
    public FancyDresser(int fnumber, SponsorshipForm sponsorsForm, string pCostume) : base(number,sponsForm) 
     { 
      number = fnumber; 
      sponsForm = sponsorsForm; 
      costume = pCostume; 
     } 
    } 
} 

は現在、あなたが理由もなく静的変数を使用している瞬間

+1

コードの残りの部分(ループボディが閉じている場所など)を含めてください。この情報がなければ、コードが何をしているかを確実に知ることはできません。 – byxor

+2

最後のオブジェクトのコピーを追加することは、確かに共通の問題です。しかし、あなたが質問に含めるコードのセグメントは、 'new'-edオブジェクトを再利用しないため、無料です。コードの他のいくつかのブランチが存在する必要があります。 – dasblinkenlight

+0

ちょうど残りのコードを掲載しました。ありがとう – newtopm

答えて

0

でSponsorshipFormクラスを使用していません。 だけから、あなたのコードを変更:へ

static public int number; 
    static public bool finished; 
    static public int hours; 
    static public int minutes; 
    static public int secs; 

    public Runner(int participationNumber) 
    { 
     number = participationNumber; 
    } 

public int number; 
    public bool finished; 
    public int hours; 
    public int minutes; 
    public int secs; 

    public Runner(int participationNumber) 
    { 
     number = participationNumber; 
    } 

そして、次のシグネチャを変更します。

public Professional(int worldRanking, int pNumber) : base(pNumber) 

public Amateur(int aNumber, SponsorshipForm SponsForm) : base(aNumber) 

public FancyDresser(int fnumber, SponsorshipForm sponsorsForm, string pCostume) : base(fnumber, sponsForm) 

は、静的プロパティを覚えて、そのクラスのすべてのインスタンス間で共有されますあなたはそれを望んでいません。

SponsorshipFormをチェックしてください。静的であれば、一意になります。

関連する問題