基本クラスSportがあります。このプロパティには、特定の派生型に必要な適切なタイプのオブジェクトが返されます(たとえば、BilliardsはSportを拡張し、プロパティはBilliardBallタイプを返します)。
Sportクラスに大きなifステートメントを含めるよりも良い方法はありますか(このオブジェクトがBilliardsインスタンスの場合は、BilliardBallを返します。それ以外の場合は...)?
基本クラスSportがあります。このプロパティには、特定の派生型に必要な適切なタイプのオブジェクトが返されます(たとえば、BilliardsはSportを拡張し、プロパティはBilliardBallタイプを返します)。
Sportクラスに大きなifステートメントを含めるよりも良い方法はありますか(このオブジェクトがBilliardsインスタンスの場合は、BilliardBallを返します。それ以外の場合は...)?
なぜここでジェネリックを話しているのですか?そして、なぜスポーツはそこにあるすべてのスポーツについて知っているのですか?
手始めに、以下のようなことを行うことができます。
public interface IBall
{
}
public class BilliardBall : IBall
{
}
public abstract class Sport
{
protected abstract IBall Ball { get; }
}
public class Billiards : Sport
{
protected override IBall Ball
{
get { return new BilliardBall(); }
}
}