Плюсы и минусы «новых» свойств в C # / .Net?
Учитывая следующий пример кода:
// delivery strategies
public abstract class DeliveryStrategy { ... }
public class ParcelDelivery : DeliveryStrategy { ... }
public class ShippingContainer : DeliveryStrategy { ... }
и следующий пример класса заказа:
// order (base) class
public abstract class Order
{
private DeliveryStrategy delivery;
protected Order(DeliveryStrategy delivery)
{
this.delivery = delivery;
}
public DeliveryStrategy Delivery
{
get { return delivery; }
protected set { delivery = value; }
}
}
Когда я получу новый тип класса заказа, он унаследует свойство Delivery типа DeliveryStrategy.
Теперь, когда указано, что заказы клиента должны быть доставлены с использованием стратегии ParcelDelivery, мы могли бы рассмотреть вопрос:новыйИспользование свойства Delivery в классе CustomerOrder:
public class CustomerOrder : Order
{
public CustomerOrder()
: base(new ParcelDelivery())
{ }
// 'new' Delivery property
public new ParcelDelivery Delivery
{
get { return base.Delivery as ParcelDelivery; }
set { base.Delivery = value; }
}
}
(Очевидно, что CustomerOrder должен убедиться, что он (полиморф) совместим с Order)
Это позволяет напрямую использовать стратегию ParcelDelivery в CustomerOrder без необходимости приведения.
Считаете ли вы использовать этот шаблон? почему, почему нет?
Обновить: я придумал этот шаблон, вместо использования обобщений, потому что я хочу использовать это для нескольких свойств. Я не хочу использовать аргументы универсального типа для всех этих свойств