Entiendo cómo la palabra clave "nueva" puede ocultar métodos en una clase derivada. Sin embargo, ¿qué implicaciones tiene para las clases que implementan interfaces que usan la palabra clave?¿Se puede usar la nueva palabra clave C# para expandir las propiedades en una interfaz?
Considere este ejemplo, donde decido expandir una interfaz haciendo sus propiedades de lectura/escritura.
public interface IReadOnly {
string Id {
get;
}
}
public interface ICanReadAndWrite : IReadOnly {
new string Id {
get;
set;
}
}
entonces usted es capaz de hacer cosas como esta:
public IReadOnly SomeMethod() {
// return an instance of ICanReadAndWrite
}
Es este mal diseño? ¿Causará problemas para mis clases implementar ICanReadAndWrite?
Editar: Aquí está un ejemplo artificioso de por qué yo podría querer hacer algo como esto:
Decir que tengo una clase de fábrica que devuelve un IShoppingCartItemReadWrite. Luego puedo tener una capa de servicio que manipula precios, cambia cosas, etc. Entonces, puedo pasar estos objetos como IShoppingCartItemReadOnly a algún tipo de capa de presentación que no los cambie. (Sí, lo sé técnicamente can cambiarlos-- esta es una pregunta de diseño, no de seguridad, etc.)
Su ejemplo específico no tiene mucho sentido. Si puedes leer y escribir, entonces no es de solo lectura. –
Se puede cambiar un IShoppingCartItemReadWrite, pero si tengo una referencia a IShoppingCartItemReadOnly, es de solo lectura a menos que lo lances a otra cosa. – user10789
Tenga en cuenta que en realidad no necesita la palabra clave "nueva". –