Cri*_*spy 2 c# generics foreach inheritance
所以我在上面的问题链接的问答中有以下代码.
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())
{
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试更多地理解泛型来提高我的技能,所以我有一个问题:现在我如何使用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();
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加了OverseasOrder以提供更好的示例.
这里的问题是,订单是一个通用类,所以Order<T>并Order基本上是两种截然不同的类型.
你可以这样做:
public abstract class Order
{
public abstract String GetDeliveryMethod();
}
public abstract class Order<TDelivery> : Order
where TDelivery : DeliveryStrategy
{
.... the rest of your class
public override String GetDeliveryMethod()
{
return Delivery.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
或者......您可以将Order重新定义为非泛型,在这种情况下,您将失去一些强类型.
| 归档时间: |
|
| 查看次数: |
7070 次 |
| 最近记录: |