この質問は、この質問に対するJon Skeet の回答を試した結果です。
したがって、上記の質問リンクからの質問と回答に基づいて、次のコードがあります。
public abstract class DeliveryStrategy { }
public class ParcelDelivery : DeliveryStrategy { }
public class ShippingContainer : DeliveryStrategy { }
public abstract class Order<TDelivery> where TDelivery : DeliveryStrategy
{
private TDelivery delivery;
protected Order(TDelivery delivery)
{
this.delivery = delivery;
}
public TDelivery Delivery
{
get { return delivery; }
set { delivery = value; }
}
}
public class CustomerOrder : Order<ParcelDelivery>
{
public CustomerOrder()
: base(new ParcelDelivery())
{ }
}
public class OverseasOrder : Order<ShippingContainer>
{
public OverseasOrder() : base(new ShippingContainer())
{
}
}
スキルセットを向上させるためにジェネリックをもっと理解しようとしているので、次の質問があります。「注文」のコレクションをループするために foreach を使用するにはどうすればよいですか? C#2.0を使用しています。
私がやろうとしていることのコード例(コンパイルしません)。
List<Order> orders = new List<Order>();
orders.Add(new CustomerOrder());
orders.Add(new CustomerOrder());
orders.Add(new OverseasOrder());
orders.Add(new OverseasOrder());
foreach (Order order in orders)
{
order.Delivery.ToString();
}
編集: より良い例を示すために、OverseasOrder を追加しました。