Чем следует руководствоваться, делая выбор между структурой и классом? Полагаю, можно пользоваться следующими правилами: - если необходимо отнести класс к развернутому типу, делайте его структурой;
- если у класса число полей относительно невелико, а число возможных объектов относительно велико, делайте его структурой. В этом случае память объектам будет отводиться в стеке, не будут создаваться лишние ссылки, что позволит повысить эффективность работы;
- в остальных случаях проектируйте настоящие классы.
Поскольку на структуры накладываются дополнительные ограничения, то может возникнуть необходимость в компромиссе - согласиться с ограничениями и использовать структуру либо пожертвовать развернутостью и эффективностью и работать с настоящим классом. Стоит отметить: когда говорится, что все встроенные типы - int и другие - представляют собой классы, то, на самом деле, речь идет о классах, реализованных в виде структур. Рассмотрим теперь более подробно вопросы описания структур, их синтаксиса, семантики и тех особенностей, что отличают их от классов. Синтаксис структур Синтаксис объявления структуры аналогичен синтаксису объявления класса: [атрибуты][модификаторы]struct имя_структуры[:список_интерфейсов] {тело_структуры} Какие изменения произошли в синтаксисе в сравнении с синтаксисом класса, описанным в лекции 16? Их немного. Перечислим их: - ключевое слово class изменено на слово struct;
- список родителей, который для классов, наряду с именами интерфейсов, мог включать имя родительского класса, заменен списком интерфейсов. Для структур не может быть задан родитель (класс или структура). Заметьте, структура может наследовать интерфейсы;
- для структур неприменимы модификаторы abstract и sealed. Причиной является отсутствие механизма наследования.
Все, что может быть вложено в тело класса, может быть вложено и в тело структуры: поля, методы, конструкторы и прочее, включая классы и интерфейсы. |