Полагаю, что большинство из приведенных выше ответов верны, но я не уверен, что они верны.
Правильный ответ: вы очень редко переключаетесь на язык ОО, это указывает на то, что вы делаете свой ОО неправильно. В этом случае это прекрасный признак того, что у вашего класса Enum есть проблемы.
Вы должны просто вызывать Console.WriteLine (mood.moodMessage ()) и определять moodMessage для каждого из состояний.
Если добавлено новое состояние - весь ваш код должен адаптироваться автоматически, ничто не должно дать сбой, вызвать исключение или потребовать изменений.
Редактировать: ответ на комментарий.
В вашем примере, чтобы быть "Хорошим OO", функциональность режима файла будет управляться объектом FileMode. Он может содержать объект делегата с операциями «open, read, write ...», которые различны для каждого FileMode, поэтому File.open («name», FileMode.Create) может быть реализован как (извините за отсутствие знакомства с API):
open(String name, FileMode mode) {
// May throw an exception if, for instance, mode is Open and file doesn't exist
// May also create the file depending on Mode
FileHandle fh = mode.getHandle(name);
... code to actually open fh here...
// Let Truncate and append do their special handling
mode.setPosition(fh);
}
Это гораздо лучше, чем пытаться делать это с переключателями ... (кстати, методы будут как частными, так и, возможно, делегированными классам "Mode")
Когда ОО выполняется хорошо, каждый отдельный метод выглядит как несколько строк действительно понятного, простого кода - СЛИШКОМ простого. У вас всегда возникает ощущение, что есть какое-то большое грязное «сырное ядро», в котором собраны все маленькие начо-объекты, но вы никогда не сможете его найти - это начос до самого конца ...