Объектно-ориентированный анализ и проектирование

StackOverflow https://stackoverflow.com/questions/609630

Вопрос

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

Есть ли альтернатива этому??

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

/

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top