2010-07-14 2 views

ответ

6

Нет, они не могут. Все функции, определенные в интерфейсе, должны быть общедоступными (или какова точка их определения в интерфейсе?).

От MSDN:

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

1

Нет, они всегда публичные.

+2

А как насчет «почему»? ;-) – Abel

+1

Извините, почему явился, если ответ был «да». – gooch

1

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

3

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

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

Однако, обратите внимание, что интерфейс в целом может быть private, protected, internal, protected internal или public. Если частное означает, что оно доступно только в его текущей области (например, внутри содержащего класса). Действует следующее:

class SomeClass 
{ 
    // inside a class, an interface can have access modifiers 
    private interface IPrivateTest 
    { 
     void TestMe(); // always public, cannot even use "public" keyword 
    }  
} 
+0

Бывают ситуации, когда сборку Foo было бы полезно объявить интерфейс с «внутренними» членами, так что сборка Foo может создавать экземпляры класса, реализующие интерфейс, передавать их во внешний код и получать их обратно из внешний код, без внешнего кода, который может заменить любой тип, не предоставленный Foo. Было бы возможно, чтобы Foo определил интерфейс, который наследуется от открытого интерфейса, использует внешний мир для публичного интерфейса и передает данные, полученные от внешнего мира, в частный интерфейс, но это обеспечит ... – supercat

+0

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

Смежные вопросы