Выбор между классами и структурами
Обновлен: Ноябрь 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.