Почему следующее является допустимым для C #:
public interface ISomeInterface
{
int SomeProperty
{
get;
}
}
public class SomeClassImplementingInterface : ISomeInterface
{
public int SomeProperty
{
get { return 32; }
protected set {}
}
}
, а это недопустимо:
public abstract class SomeAbstractClass
{
public abstract int SomeProperty
{
get;
}
}
public class SomeClassExtendingAbstractClass : SomeAbstractClass
{
public override int SomeProperty
{
get { return 32; }
protected set {}
}
}
Последнее приводит к следующей ошибке времени компиляции:
'InterfaceAbstractTest.SomeClassExndingAbstractClass.SomeProperty. набор': не может переопределить, потому что 'InterfaceAbstractTest.SomeAbstractClass.SomeProperty' не имеет переопределяемый метод доступа к множеству InterfaceAbstractTest
Какова причина не запрещать последнее, но разрешать первое?