Edit:Resulta que me olvidé de algo obvio, pero voy a dejar la pregunta abierta en caso de que alguien más cometa el mismo error obvio. Gracias a aquellos que lo señalaronVer abajo para una explicación.¿Agregar propiedades a una interfaz impide crear "conjuntos" privados/protegidos en tipos derivados?
¿Es posible tener un conjunto no público en una propiedad que está anulando una propiedad de interfaz?
Tal vez estoy teniendo un momento estúpido, pero me parece que tener una propiedad definida en una interfaz implica implícitamente que ninguna clase derivada puede proporcionar ningún conjunto no público para dicha propiedad.
Ejemplo:
interface IField
{
bool IsValid { get; }
}
... y ya que las propiedades de interfaz pueden no tener modificadores de accesibilidad significa que:
class Field : IField
{
public override bool IsValid { get; protected set; }
}
... no será posible a pesar del hecho de que cumple con la interfaz requisitos conceptualmente.
IMO esto tiene grandes implicaciones negativas para el encapsulamiento que pueden realizarse a través de Propiedades no públicas, y previene una serie de patrones de uso comunes para Propiedades.
Soy consciente de que puede crear un miembro SetIsValid no público que modifique un almacén de respaldo común, pero que crearía un patrón incoherente y agregaría lo que de otra manera sería ruido de código si no fuera necesario.
¿He perdido algo?
Editar: Sí tengo perdido algo
estoy modificar el código de otra persona en el momento y sólo se dan cuenta de que la clase estaba luchando con implementado la interfaz y derivado de una clase base Y soy nuevo en C# Eso es lo que causó la anulación de la confusión.
la clase real parecía:
class Field : IField, BaseField
{
public override bool IsValid { get; protected set; }
}
... donde BaseField implementa la interfaz también, pero no puso en práctica el conjunto.
¿Intentó compilar su ejemplo primero? Su interfaz de ejemplo es incorrecta porque tiene el modificador público, que es ilegal. Además, la definición de su clase es incorrecta porque tiene la palabra clave de anulación en una definición de interfaz, que es ilegal.Una vez que corrijas esas dos cosas, se compilará perfectamente y funcionará como esperabas. – Nick
El público en la interfaz era un error tipográfico. – Catskul
Sí, estás teniendo uno de esos momentos. –