Поскольку вызывающий объект, использующий интерфейс, заботится только о том, чтобы разработчик интерфейса по крайней мере реализовал определение интерфейса, как говорится в @davisoa, тогда как SomeAbstractClass
в вашем примере определяет публичный контракт, в котором точно указывается тип, доступность и (для свойств) читаемость / возможность записи членов.
Если вы используете отражение, чтобы получить PropertyInfo SomeProperty
(из базового или дочернего класса), он должен разрешить эту информацию откуда-то. Разрешение дочернему классу изменять читаемость / возможность записи будет таким же нарушением договора, как и изменение типа возвращаемого значения или списка аргументов.
Представьте себе, например:
SomeAbstractClass sc = new SomeClassExtendingAbstractClass();
PropertyInfo pi = sc.GetType().GetProperty("SomeProperty");
Console.Out.WriteLine(pi.CanWrite); // What should be printed here?