2015-06-04 7 views
2

Я занят изучением C# здесь, являются ли типы значений типов C# или ссылочными типами ?, Поскольку массивы являются ссылочными типами, и я знаю, что строки также являются ссылочными типами.Являются ли типы значений C# или ссылочные типы?

Thank you.

+2

Типы значений - это структуры. Вы можете проверить определение каждого типа коллекции (например, в документации), но я не знаю какого-либо типа коллекции BCL, который фактически определен как структура. Вы можете создать свой собственный, конечно, –

+1

* Почему вы спрашиваете? Почему вас интересует, являются ли они типами ценности или нет? Вы пытаетесь избежать необходимости копирования по порядку? Вы пытаетесь эмулировать семантику C++? –

+0

@PanagiotisKanavos это хороший вопрос, и что вы подразумеваете под «заботой»? – killer

ответ

3

Вы можете создать коллекцию типов значений (например, struct MyCollection<T> : IEnumerable<T>), но это было бы почти бесполезно (потому что вы могли бы сделать ее доступной только для чтения, и это было бы просто, или вы могли бы попытаться сделать ее изменчивой, но она было бы очень сложно сделать его «ценностным типом», а копия коллекции - это отдельный объект из оригинала) (и обратите внимание, что это будет почти бесполезно, потому что если вы используете тип значения через один, если его интерфейсы, вы обычно вставляете его). Итак, в конце концов, не :-)

Все коллекции «фондового» .NET, которые я помню, являются ссылочными типами. Таким образом, массивы, List<>, ArrayList, Dictionary<,>, ...

+1

Начиная с .NET 4.5 (Visual Studio 2012), тип значения ('struct')' System.ArraySegment <> 'является типом коллекции! Например, вы можете 'foreach' через' new ArraySegment (new [] {"a", "b", "c", "d", "e",}, 2, 3) '. Эта структура просто содержит ссылку на массив (массивы являются изменяемыми ссылочными типами). Копировать по значению не проблема, так как это мелкая копия. Это только ссылка, которая копируется из-за семантики значения. Поэтому имеет смысл иметь тип коллекции типа 'struct', когда это какая-то оболочка вокруг чего-то другого. –

Смежные вопросы