Плюсы и минусы «новых» свойств в 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 без необходимости приведения.

Считаете ли вы использовать этот шаблон? почему, почему нет?

Обновить: я придумал этот шаблон, вместо использования обобщений, потому что я хочу использовать это для нескольких свойств. Я не хочу использовать аргументы универсального типа для всех этих свойств

Ответы на вопрос(8)

Ваш ответ на вопрос