Как я реализую членов внутренних интерфейсов

Java, конечно, хорош, но я делал очень хорошо с Python и Qt через PyQt4 в последнее время. Я нахожу, что добиваюсь цели быстрее, чем я сделал в Swing или SWT, также.

До сих пор, никакие определенные для платформы тонкие настройки не были необходимым, и взглядом виджетов Qt4, хорошим на различных платформах. Спокойный разработчик GUI очень хорош, и использование, которое Python включил простой интеграции с некоторыми другими межплатформенными платформами (особенно VTK, scipy-кластер , и [приблизительно 116] БОЛЬШОЙ ГЛОТОК - обернутые объекты для взаимодействия через интерфейс с выводом файлов от инструмента производительности).

Примечание, что QT не свободен, если Вы не используете его на проектах с открытым исходным кодом.

22
задан wired_in 6 January 2013 в 02:07
поделиться

2 ответа

Просто обратите внимание - код, который вы фактически предоставили , компилируется , потому что Implementer является внутренним классом. Проблема возникает, когда Реализатор является общедоступным.

Можно использовать явную реализацию интерфейса:

public class Implementer : ISecondInferface
{
    private IFirstInterface first;
    IFirstInterface ISecondInterface.First { get { return first; } }
}

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

public class Implementer : ISecondInterface
{
    internal IFirstInterface First { get; private set; }
    IFirstInterface ISecondInterface.First { get { return First; } }
}

К сожалению, внутренние интерфейсы имеют открытые члены - это действительно усложняет подобные вещи. Было бы странно, если бы общедоступный интерфейс имел внутренний член (для чего он был бы внутренним - разработчик или декларатор?), Но для внутренних интерфейсов это имеет гораздо больший смысл.

48
ответ дан 29 November 2019 в 03:41
поделиться

Почему элементы внутренних интерфейсов должны быть публично реализованы?

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

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

internal IFirstInterface First { get; private set; }

IFirstInterface ISecondInterface.First
{
    get { return this.First; }
}
11
ответ дан 29 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: