В ответе @Marc Gravell, как указано в C # Language Spec 5.5, важно знать, что понимается под термином «определяемый пользователем тип». Я не нашел четкого определения w.r.t. это использование в языке C # Spec. В UML и в общем выражении класс является экземпляром типа. Но в контексте C # Language Spec это значение неясно.
Справочник по языку Visual Basic «Определенные пользователем типы» (в https://msdn.microsoft.com/en- us / library / cec05s9z.aspx ) говорит
«Предыдущие версии Visual Basic поддерживают пользовательский тип (UDT). Текущая версия расширяет UDT до структуры».
blockquote>, поэтому кажется, что пользовательский тип является структурой, а не классом.
Но ....
В соответствии с «Руководством по программированию на C #» «Типы» (в https://msdn.microsoft.com/en-us/ library / ms173104.aspx ):
«Типичная программа C # использует типы из библиотеки классов, а также пользовательские типы»
blockquote>, который подразумевает, что класс является определяемым пользователем типом. Позднее он приводит пример «сложных пользовательских типов:»
MyClass myClass;
blockquote>, что означает, что «MyClass» - это пользовательский тип , И позже он говорит:
«Каждый тип в CTS определяется как тип значения или ссылочный тип, включая все пользовательские типы в библиотеке классов .NET Framework и ваши собственные пользовательские типы . "
blockquote>... что подразумевает, что все классы, созданные разработчиком, являются« Пользовательским типом ».
И, наконец, есть этот элемент Stackoverflow, в котором значение этого термина обсуждается неубедительно: Как определить, является ли свойство определяемым пользователем типом в C #?
Поэтому, чтобы быть в безопасности, я вынужден рассматривать все классы, созданные мной или те, которые содержатся в .Net Framework, все должны быть определенными пользователем типами, и поэтому Not Thread Safe для назначения , потому что он говорит в разделе 5.5 языка C #:
Чтения и записи ... а также определяемые пользователем типы не гарантируются как атомарные.
blockquote>К сожалению, разговорный термин используется в точной спецификации, такой как C # Language Specification. Из-за этой двусмысленности, чтобы быть потокобезопасным, я могу писать менее оптимальный код, чем это было бы возможно, если окажется, что «Пользовательский тип» не включает классы CLR.
Поэтому Я прошу о дальнейших разъяснениях этого ответа stackoverflow, поскольку его текущая основа ответа оставляет эту значительную двусмысленность. В его нынешнем виде ответ на вопрос «Является ли ссылочным назначением потокобезопасным?» кажется «НЕТ».