Я настоятельно рекомендую Java для межплатформенной разработки GUI. В частности, я рекомендую разработчику GUI, который идет Netbeans IDE. Это очень просто и очень мощно. Можно указать и перетащить и отбросить, чтобы создать GUI, и легко настроить меры, которые принимают различные кнопки и другие компоненты.
я очень предпочитаю Python как язык, но ни один из бесплатных инструментов для разработки GUI не прибывает никуда близко к этому, и то же самое, кажется, верно для других языков, которые я использовал. (Я должен указать, что QT имеет замечательных разработчиков GUI для различных языков, таких как C и Python, но это только свободно, когда используется на проектах с открытым исходным кодом.)
РЕДАКТИРОВАНИЕ: QT недавно повторно лицензировался как LGPL, таким образом, Вы свободны использовать его в коммерческом применении. Привязка Python для этого (PyQT) не повторно лицензировалась, но другой проект, названный , PySide был создан для обеспечения привязки QT Python.
См. рекомендации по переопределению Equals () и operator == .
Цитата:
По умолчанию оператор == проверяет ссылочное равенство путем определения указывают ли две ссылки на один и тот же объект. Следовательно, ссылочные типы не должны реализовывать operator ==, чтобы получить эту функциональность. Когда тип неизменяемый, то есть данные, содержащиеся в экземпляре, не могут быть изменены, может быть полезен оператор перегрузки == для сравнения равенства значений вместо ссылочного равенства, потому что, как неизменяемые объекты, они могут считаться такими же, как и long поскольку они имеют одинаковую ценность. Не рекомендуется переопределять оператор == в неизменяемых типах.
Обычно:
Если вы хотите, чтобы == и! = Вели себя как Equals (..)
и ]! Equals (..)
вам необходимо реализовать операторы.
См. Рекомендации по реализации равенства и оператора равенства (==)
Для типов значений (структур) «Реализуйте == каждый раз, когда вы переопределяете метод Equals»
Для ссылочных типов (классов): «Большинство ссылочных типов, даже те, которые реализуют метод Equals, не должны переопределять ==. " Исключение составляют неизменяемые классы и классы с семантикой, подобной значению.
Если вы переопределив метод equals и все еще желая иметь возможность проверять равенство (или неравенство), вам, вероятно, также следует переопределить методы == и! =.
Было бы желательно, поскольку было бы неожиданно, если бы:
if (foo == bar)
... вел себя иначе, чем:
if (foo.Equals(bar))
Это не обязательно, никто не убьет вас, если вы этого не сделаете.
Однако заметьте, что часто более естественно написать (A == B), чем A.Equals (B). Если вы предоставите оба метода, потребителям вашего кода будет проще.
В дополнение ко всем ответам, которые уже здесь, не забудьте убедиться, что GetHashCode ()
также согласован.
Это не обязательно, но умный поступок.
Если вы создаете фреймворк и другой разработчик, кроме вас, собираетесь использовать объект, вы должны переопределить == и! =. Таким образом, когда разработчик может его использовать, у него, по крайней мере, будет правильная логика для сравнения двух объектов, а не просто одинаковых в памяти.
Я бы позаботился о том, чтобы ваш == &! = Действительно вызывал ваш метод equals.
в A. Equals (B) A не может быть нулевым в A == B любое значение может быть нулевым
Переопределение == для вызова Equals кажется мне в целом плохой идеей для ссылочных типов. Если вы переопределите ==, чтобы он вызывал Equals, я не думаю, что у пользователя вашего кода есть способ проверить, ссылаются ли две объектные ссылки на один и тот же объект (по сравнению с объектом с одинаковыми свойствами).
Если люди хотят протестировать экземпляры ваших классов на равенство значений, тогда им, конечно же, следует просто вызвать Equals, сохранив == специально для проверки эталонного равенства.