Объектно-ориентированный анализ и дизайн - PullRequest
0 голосов
/ 04 марта 2009

Почему я не могу указать статический тип методов в интерфейсе.

Есть ли альтернатива для этого ??

но я должен использовать только inerface вместо абстрактного класса.

/

Есть ли проблема с указанием спецификатора доступа в интерфейсе?

Я хочу указать события в Интерфейсе, и это должно быть доступно только реализованному классу, поэтому я хочу защищенный спецификатор доступа к этому событию.

и у меня есть определенная функция, которая может использовать интерфейс в другом классе, в этом случае я могу использовать общедоступный спецификатор доступа.

Ответы [ 4 ]

2 голосов
/ 04 марта 2009

Я не знаю, на каком языке вы говорите, но я отвечу так, как будто в C #.

Почему я не могу указать статический тип методов в интерфейсе. Есть ли альтернатива для этого ??

Это потому, что вы не можете переопределить статические методы. Чего ты пытаешься достичь?

Члены в интерфейсах всегда общедоступны в C #. Если вам нужны другие уровни защиты, используйте абстрактный класс. Какова будет цель защищенных событий, если вы не можете получить к ним доступ через интерфейс? Это не имеет ничего общего с интерфейсом (помните, интерфейс не может иметь никакого кода). Если вы имеете в виду, что только реализующие классы могут вызывать события, будьте уверены, что они единственные, которые могут их вызывать. События построены таким образом - только сам класс может вызывать события. Вы не можете вызвать событие, внешнее по отношению к классу (кроме случаев, когда у вас есть метод, вызывающий событие).

1 голос
/ 04 марта 2009

интерфейсы только описывают ваш разработчик для общественности. Единственный модификатор доступа для интерфейса - это «внутренний» в самом интерфейсе, что делает его интерфейсом, видимым только для всех элементов одной сборки или тех, которые известны с помощью атрибута «InternalsVisibleTo».

Если только разработчики должны видеть определенное событие, то это событие должно быть в некотором базовом классе.

Статический метод в значительной степени является остатком процедурного программирования. они действительно используются (см., например, методы расширения), но на самом деле не имеют большого отношения к ООП.

0 голосов
/ 04 марта 2009

Мой опыт работы с ООП связан с ActionScript 3, но я уверен, что он относительный.

Статические методы нельзя переопределять, и они не используются, когда класс расширяет класс предка.

Модификаторы доступа не используются в интерфейсе, потому что интерфейс используется для настройки методов PUBLIC.

В AS3 интерфейс - это просто сигнатура метода без блока, но с типами данных.

Важно отметить, что сигнатуры методов получения / установки могут также использоваться в интерфейсе. Они полезны, и если вы используете только сеттер, вы создали открытый доступ только для чтения к закрытой инкапсулированной переменной.

Что касается интерфейса вместо абстрактного класса, все зависит от того, как вы хотите реализовать свой код. Часто время, интерфейс и абстрактный класс используются вместе для достижения разных результатов с использованием наследования и полиморфизма (расширяет / реализует).

0 голосов
/ 04 марта 2009

Я не понимаю, что вы имеете в виду под первым вопросом, но ваш второй вопрос об использовании защищенных интерфейсов - это прямое «нет». Интерфейсы называются «интерфейсами», потому что они определяют «интерфейс» (то есть публичные методы), в котором вы можете взаимодействовать с этим объектом.

...