Java, конечно, хорош, но я делал очень хорошо с Python и Qt через PyQt4 в последнее время. Я нахожу, что добиваюсь цели быстрее, чем я сделал в Swing или SWT, также.
До сих пор, никакие определенные для платформы тонкие настройки не были необходимым, и взглядом виджетов Qt4, хорошим на различных платформах. Спокойный разработчик GUI очень хорош, и использование, которое Python включил простой интеграции с некоторыми другими межплатформенными платформами (особенно VTK, scipy-кластер , и [приблизительно 116] БОЛЬШОЙ ГЛОТОК - обернутые объекты для взаимодействия через интерфейс с выводом файлов от инструмента производительности).
Примечание, что QT не свободен, если Вы не используете его на проектах с открытым исходным кодом.
Просто обратите внимание - код, который вы фактически предоставили , компилируется , потому что 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; } }
}
К сожалению, внутренние интерфейсы имеют открытые члены - это действительно усложняет подобные вещи. Было бы странно, если бы общедоступный интерфейс имел внутренний член (для чего он был бы внутренним - разработчик или декларатор?), Но для внутренних интерфейсов это имеет гораздо больший смысл.
Почему элементы внутренних интерфейсов должны быть публично реализованы?
Когда вы определяете интерфейс, вы не определяете уровень доступа для членов, поскольку все элементы интерфейса общедоступны
. Даже если интерфейс как таковой является внутренним
, члены по-прежнему считаются общедоступными
. Когда вы делаете неявную реализацию такого члена, подпись должна совпадать, поэтому она должна быть общедоступной
.
Что касается раскрытия получателя, я бы предложил сделать явную реализацию вместо этого интерфейс и создание внутреннего свойства
для отображения значения:
internal IFirstInterface First { get; private set; }
IFirstInterface ISecondInterface.First
{
get { return this.First; }
}