Какой аргумент против объявления членов защищенного доступа на интерфейсах? Это, например, неверно:
public interface IOrange
{
public OrangePeel Peel { get; }
protected OrangePips Seeds { get; }
}
В этом примере интерфейс IOrange
гарантирует, что разработчики по крайней мере предоставят экземпляр OrangePips
своим наследникам. Если разработчик хотел, они могли бы расширить область действия до полного public
:
public class NavelOrange : IOrange
{
public OrangePeel Peel { get { return new OrangePeel(); } }
protected OrangePips Seeds { get { return null; } }
}
public class ValenciaOrange : IOrange
{
public OrangePeel Peel { get { return new OrangePeel(); } }
public OrangePips Seeds { get { return new OrangePips(6); } }
}
Назначение protected
членов на интерфейсах заключается в предоставлении контракта поддержки для наследников (подклассы), например:
public class SpecialNavelOrange : NavelOrange
{
...
// Having a seed value is useful to me.
OrangePips seeds = this.Seeds;
...
}
(правда, это не сработает в течение struct
с)
Я не вижу особого смысла в модификаторах private
или internal
в интерфейсах, но поддержка модификаторов public
и protected
кажется вполне разумной.
<Ч />
Я попытаюсь объяснить полезность protected
членов на interface
с, отделив их от interface
с целиком:
Давайте представим новое ключевое слово C #, support
, для принудительного исполнения контрактов наследников, чтобы мы объявляли вещи следующим образом:
public support IOrangeSupport
{
OrangePips Seeds { get; }
}
Это позволит нам заключать классы для предоставления защищенных членов их наследникам:
public class NavelOrange : IOrange, IOrangeSupport
{
public OrangePeel Peel { get { return new OrangePeel(); } }
protected OrangePips Seeds { get { return null; } }
}
Это не особенно полезно, потому что классы уже подразумевают этот контракт, предоставляя protected
членов в первую очередь.
Но тогда мы могли бы также сделать это:
public interface IOrange : IOrangeSupport
{
...
}
Таким образом, применяя IOrangeSupport
ко всем классам, которые реализуют IOrange
, и требуя от них предоставления определенных protected
членов - что мы в настоящее время не можем сделать.