-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;
}
}
}
は現在、あなたが理由もなく静的変数を使用している瞬間
コードの残りの部分(ループボディが閉じている場所など)を含めてください。この情報がなければ、コードが何をしているかを確実に知ることはできません。 – byxor
最後のオブジェクトのコピーを追加することは、確かに共通の問題です。しかし、あなたが質問に含めるコードのセグメントは、 'new'-edオブジェクトを再利用しないため、無料です。コードの他のいくつかのブランチが存在する必要があります。 – dasblinkenlight
ちょうど残りのコードを掲載しました。ありがとう – newtopm