私はこのようなチーム/プレイヤーの関係をデザインしたいと思っています。すべてのプレーヤーが1つのチームに所属していますが、インターフェースを使って練習したいのでITeamとIAthleteを作ってからBasketballTeamとBasketballPlayerを作りました。 は、その後、私はこのコードを書いた:2つのインターフェイスと2つのクラスの関係。
public interface IAthlete
{
string GetName();
string GetSport();
}
public interface ITeam
{
void AddPlayer(IAthlete player);
IAthlete[] GetAthletes();
string GetName();
int GetNumberOfPlayers();
}
public class BasketballPlayer:IAthlete
{
private string name;
public string GetName()
{
return this.name;
}
public string GetSport()
{
return "Basketball";
}
public BasketballPlayer(string name)
{
this.name = name;
}
public void Run(int distance)
{
Console.WriteLine(this.name + " just ran " + distance.ToString() + " meters.");
}
public bool Shoot()
{
Console.WriteLine("Successful shot for " + this.name);
return true;
}
}
public class BasketballTeam: ITeam
{
BasketballPlayer[] players;
int numberOfPlayers;
private string name;
public void AddPlayer(BasketballPlayer player)
{
this.players[this.numberOfPlayers] = player;
this.numberOfPlayers++;
}
public IAthlete[] GetAthletes()
{
return this.players;
}
public string GetName()
{
return this.name;
}
public int GetNumberOfPlayers()
{
return this.numberOfPlayers;
}
public BasketballTeam(string name)
{
this.numberOfPlayers = 0;
this.name = name;
this.players = new BasketballPlayer[10];
}
}
class Program
{
static void Main(string[] args)
{
BasketballTeam bt = new BasketballTeam("MyTeam");
BasketballPlayer bp = new BasketballPlayer("Bob");
bt.AddPlayer(bp);
foreach (BasketballPlayer player in bt.GetAthletes())
{
Console.WriteLine(player.GetName());
}
foreach (IAthlete a in bt.GetAthletes())
{
Console.WriteLine(a.GetName());
}
}
}
をしかし、私はこの使用しているので、それがコンパイルされません:私はそれを考えて、この
public void AddPlayer(IAthlete player)
の代わりにBasketballPlayerで
public void AddPlayer(BasketballPlayer player)
をBasketballPlayerはIAthleteなので、動作するはずです。 そして、私はIAthleteに変更した場合、私はこのような別のクラスにすることができます。
public class HockeyPlayer : IAthlete
{
private string name;
public string GetName()
{
return this.name;
}
public string GetSport()
{
return "Hockey";
}
public HockeyPlayer(string name)
{
this.name = name;
}
public void Run(int distance)
{
Console.WriteLine(this.name + " just ran " + distance.ToString() + " meters.");
}
}
をして、私のメインでこれを行う:私はHockeyPlayerを追加しているので、論理的に間違っている
HockeyPlayer hp = new HockeyPlayer("Henry");
bt.AddPlayer(hp);
バスケットボールチームそれはこれのようになっていると私はちょうどそれをしないように注意する必要がありますか?私は間違って何をしていますか?クラス図を使用してこれをどのように表示しますか?これは疎結合につながるか?
これらのメソッドのほとんどではなく、プロパティを使用する必要があります。 – SLaks