¿Por qué es que la siguiente es legal C#:Adición de acceso a la interfaz de propiedad permitido, pero no a la propiedad abstracta
public interface ISomeInterface
{
int SomeProperty
{
get;
}
}
public class SomeClassImplementingInterface : ISomeInterface
{
public int SomeProperty
{
get { return 32; }
protected set {}
}
}
pero esto no es:
public abstract class SomeAbstractClass
{
public abstract int SomeProperty
{
get;
}
}
public class SomeClassExtendingAbstractClass : SomeAbstractClass
{
public override int SomeProperty
{
get { return 32; }
protected set {}
}
}
Los últimos resultados en la siguiente error en tiempo de compilación:
'InterfaceAbstractTest.SomeClassExtendingAbstractClass.SomeProperty.set': cannot override because 'InterfaceAbstractTest.SomeAbstractClass.SomeProperty' does not have an overridable set accessor InterfaceAbstractTest
¿Cuál es el razonamiento para no rechazar este último y permitir el anterior?
Creo que la palabra kay aquí es "anular". No hay un método establecido para anular. –
¿O es que la palabra clave de anulación se especifica en el nivel de propiedad en lugar del nivel de acceso? Después de todo, cada acceso es un método distinto cuando se trata de eso. –
Derecha: la palabra clave abstracta funciona en el nivel de propiedad, no en el nivel de acceso. –