Неизменяемая типы значений и ссылочные типы неизменных семантический все, но идентичны; единственные различия заключаются в том, что ссылочные типы поддерживают контрольные проверки равенства, которые могут или не могут быть значимыми, и что типы значений могут быть обернуты в Nullable (Of T), в то время как ссылочные типы неявно обнуляются. Если тип будет неизменным, в зависимости от того, как он будет использоваться, могут возникнуть причины для поддержки структуры или класса; structs быстрее для некоторых операций (почти все операции размером менее четырех байт), а классы могут ускоряться для некоторых других (особенно для вещей размером более 16 байт). Кроме того, некоторые типы операций практически невозможны для структур.
Взаимозаменяемые типы структур полезны, вопреки тому, что утверждают некоторые претенденты, но есть некоторые оговорки. Если у вас есть переменная, содержащая ссылку на изменяемый объект класса, и кто-то делает что-то, чтобы изменить этот объект, это изменение будет эффективно «видимо» всем, что содержит ссылку на этот объект. Если кто-то хочет изменить объект, не нарушая ничего другого, нужно знать, что он содержит единственную ссылку на этот объект. Часто каждый единственный способ убедиться в этом - скопировать все данные из объекта в экземпляр нового объекта и затем внести изменения в этот новый экземпляр. Напротив, если у вас есть изменяемая структура, можно просто сделать любые изменения, которые вы хотите, не создавая новый экземпляр.
Единственная реальная проблема с изменчивыми структурами заключается в том, что .net использует различные абстракции, чтобы заставить их вести себя как часть унифицированной системы типов, и эти абстракции могут привести к тому, что копии структур будут использоваться в тех местах, где логически должны использоваться оригиналы , Это не всегда очевидно, когда эти замены могут произойти, и они могут привести к запутанному и ошибочному поведению.
Если вы не можете решить, это почти наверняка «класс». Это невероятно редко * законно * писать структуру. –
Для турецких программистов у меня есть сообщение в блоге об этом http://sonergonul.net/2012/12/net-icerisinde-deger-tipi-ve-referans-tipi/ –