Я справедливо удивлен тем, насколько единодушный чувство - то, что getters
и методы set прекрасны и хороши. Я предлагаю провокационную статью Allen Holub" , Методы get И Методы set Злые ". Предоставленный, заголовок для значения шока, но автор делает справедливые замечания.
По существу, если Вы имеете getters
и setters
для каждого частного поля, Вы делаете те поля столь же хорошими как общественность. Вам очень было бы трудно изменять тип частного поля без волновых эффектов к каждому классу, который называет это getter
.
, Кроме того, от строго точки зрения OO, объекты должны отвечать на сообщения (методы), которые соответствуют их (надо надеяться), единственной ответственности. Подавляющее большинство getters
и setters
не имеет смысла для их составляющих объектов; Pen.dispenseInkOnto(Surface)
имеет больше смысла мне, чем Pen.getColor()
.
Методы get и методы set также поощряют пользователей класса просить у объекта некоторые данные, выполнять вычисление, и затем устанавливать некоторое другое значение в объекте, более известном как процедурное программирование. Вы были бы лучше обслужены, чтобы просто сказать объекту сделать то, во что Вы шли во-первых; также известный как Эксперт по информации идиома.
Методы get и методы set, однако, являются необходимым злом на границе слоев - UI, персистентность, и т.д. Ограниченный доступ к внутренностям класса, таким как друг C++ ключевое слово, защищенный доступ пакета Java, внутренний доступ.NET, и Друг, которому Шаблон Класса может помочь Вам уменьшить видимость getters
и методы set только те, кому нужны они.
Windows распознает разницу между программами Unicode и не-Unicode по функциям, которые они вызывают. Большинство функций Windows API будут представлены в двух вариантах: один оканчивается на A для не-Unicode и один на W для Unicode. Включаемые файлы, которые определяют эти функции, будут использовать настройки компилятора для автоматического выбора того или другого за вас.
Возможно, символы не выводятся должным образом, потому что вы выбрали шрифт, который не включает их, по умолчанию Шрифт пользовательского интерфейса.
Откуда вы берете струны? Если они жестко запрограммированы в ваших исходных кодах C, то к моменту вызова AddString они (скорее всего) уже повреждены.
Ничто не мешает взять некоторую строку Unicode, «сжать» ее в std :: string, например, и повредить его. Даже если приложения скомпилированы как Unicode.