Возможно, вы думаете о C ++ / CLI, который, в отличие от C #, позволяет пользователю объявлять «класс значений» или «класс ref».
В C # любой объявленный вами класс неявно будет ссылочным классом - только встроенные типы, структуры и перечисления имеют семантику значений.
Чтобы прочитать о классе значений в C ++ / CLI, посмотрите здесь:
http://www.ddj.com/cpp/184401955
Классы значений имеют очень мало функциональности по сравнению с классами ref и полезны для "простых старых данных"; то есть данные, которые не имеют идентичности. Поскольку вы копируете данные при назначении одного другому, система предоставляет вам конструктор копирования по умолчанию (и обязательный), который просто копирует данные в другой объект.
Чтобы преобразовать класс значения в ссылочный класс (таким образом, поместив его в кучу мусора), вы можете поместить его в «коробку».
Чтобы решить, является ли класс, который вы пишете, одним или другим, спросите себя, есть ли у него идентичность. Обычно это означает, что у него есть какое-то состояние, или есть идентификатор или имя, или понятие собственного контекста (например, узел, указывающий на соседние узлы).
Если это не так, это, вероятно, класс значений.
Однако в C # классы значений объявляются как «структуры».