Pros y contras de 'nuevas' propiedades en C # / .Net?

Considerando el siguiente código de muestra:

// delivery strategies
public abstract class DeliveryStrategy { ... }
public class ParcelDelivery : DeliveryStrategy { ... }
public class ShippingContainer : DeliveryStrategy { ... }

y la siguiente clase de orden de muestra:

// 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; }
    }
}

Cuando obtengo un nuevo tipo de clase de orden, heredará la propiedad Delivery del tipo DeliveryStrategy.

Ahora, cuando se determina que los pedidos del cliente deben entregarse utilizando la estrategia ParcelDelivery, podríamos considerar 'nuev 'ing la propiedad de entrega en la clase 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; }
    }
}

(El CustomerOrder obviamente necesita asegurarse de que sea compatible (polimorfo) con Order)

Esto permite el uso directo de la estrategia ParcelDelivery en CustomerOrder sin la necesidad de transmitir.

¿Considerarías usar este patrón? ¿por qué por qué no

Actualiza: se me ocurrió este patrón, en lugar de usar genéricos, porque quiero usar esto para varias propiedades. No quiero usar argumentos de tipo genérico para todas estas propiedades

Respuestas a la pregunta(16)

Su respuesta a la pregunta