Java2C # перевод: публичные методы в интерфейсах в C # - PullRequest
3 голосов
/ 24 июня 2009

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

Почему C # не позволяет контролировать доступ к методам в интерфейсах, как это делает Java? Например, в интерфейсе C #:

   public void Visit(Axiom axiom);

Спасибо.

Ответы [ 3 ]

6 голосов
/ 24 июня 2009

В C # и .Net в целом все методы интерфейса являются открытыми по умолчанию. Нет возможности ограничить их доступ.

Рассмотрим альтернативу, что бы значило иметь защищенный элемент на интерфейсе? Как бы вы установили правила доступа, чтобы разрешить или запретить вызывающему интерфейсу доступ к определенному методу? (Я имею в виду защищенный в смысле C #, а не Java).

Еще лучше, что будет означать личное?

5 голосов
/ 24 июня 2009

И в C #, и в Java все методы интерфейса являются общедоступными.

В Java разрешено использование публичного ключевого слова, которое может сэкономить на правилах синтаксического анализа. В C # публичное ключевое слово считалось избыточным и вообще было удалено из объявлений интерфейса.

4 голосов
/ 24 июня 2009

В C # все члены интерфейса должны быть открытыми, поэтому это не позволит вам добавлять какие-либо модификаторы видимости в объявления членов. Таким образом, ключевое слово public является избыточным и не требуется (например, если вы включите его, вы получите ошибку компилятора).

Интерфейс - это контракт, в котором говорится, что вы предоставите все функциональные возможности, указанные в определении интерфейса. Если бы вам было разрешено иметь закрытых членов в интерфейсе, вы бы не раскрывали эту функциональность (и поэтому нарушали бы контракт).

...