Поделиться через


Выбор между классами и структурами

Обновлен: Ноябрь 2007

Классы являются ссылочными типами, а структуры — типами значения. Ссылочные типы размещаются в куче, а управление памятью осуществляется сборщиком мусора. Типы значения размещаются на стеке или непосредственно в коде и становятся недоступны, когда находятся вне области видимости. В общем случае для размещения и освобождения типов значения требуется меньше затрат. Однако, если эти типы используются в сценарии, в котором требуется значительное количество преобразований упаковки-распаковки, они работают хуже по сравнению со ссылочными типами. Дополнительные сведения см. в разделе Упаковка-преобразование и распаковка-преобразование (Руководство по программированию на C#).

Дополнительные сведения о типах значения и ссылочных типах см. в разделе Общие сведения о системе общих типов (CTS).

Рекомендуется определять структуру вместо класса, если экземпляры типа малы и имеют короткое время существования или внедрены в другие объекты.

Определяйте структуру только в том случает, если тип обладает всеми приведенными ниже характеристиками.

  • Тип логически представляет единичное значение подобно примитивным типам (integer, double и т.п.).

  • Размер экземпляра не превышает 16 байт.

  • Тип является неизменяемым.

  • Тип не нуждается в частом выполнении упаковка-преобразований.

Если одно или несколько этих условий не выполняется, создавайте вместо структуры ссылочный тип. Не следование этой рекомендации может негативно сказаться на производительности.

Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Дополнительные сведения о рекомендациях по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.

См. также

Другие ресурсы

Правила разработки типов

Руководство по разработке библиотек классов