Я занят изучением C# здесь, являются ли типы значений типов C# или ссылочными типами ?, Поскольку массивы являются ссылочными типами, и я знаю, что строки также являются ссылочными типами.Являются ли типы значений C# или ссылочные типы?
Thank you.
Я занят изучением C# здесь, являются ли типы значений типов C# или ссылочными типами ?, Поскольку массивы являются ссылочными типами, и я знаю, что строки также являются ссылочными типами.Являются ли типы значений C# или ссылочные типы?
Thank you.
Вы можете создать коллекцию типов значений (например, struct MyCollection<T> : IEnumerable<T>
), но это было бы почти бесполезно (потому что вы могли бы сделать ее доступной только для чтения, и это было бы просто, или вы могли бы попытаться сделать ее изменчивой, но она было бы очень сложно сделать его «ценностным типом», а копия коллекции - это отдельный объект из оригинала) (и обратите внимание, что это будет почти бесполезно, потому что если вы используете тип значения через один, если его интерфейсы, вы обычно вставляете его). Итак, в конце концов, не :-)
Все коллекции «фондового» .NET, которые я помню, являются ссылочными типами. Таким образом, массивы, List<>
, ArrayList
, Dictionary<,>
, ...
Начиная с .NET 4.5 (Visual Studio 2012), тип значения ('struct')' System.ArraySegment <> 'является типом коллекции! Например, вы можете 'foreach' через' new ArraySegment
Типы значений - это структуры. Вы можете проверить определение каждого типа коллекции (например, в документации), но я не знаю какого-либо типа коллекции BCL, который фактически определен как структура. Вы можете создать свой собственный, конечно, –
* Почему вы спрашиваете? Почему вас интересует, являются ли они типами ценности или нет? Вы пытаетесь избежать необходимости копирования по порядку? Вы пытаетесь эмулировать семантику C++? –
@PanagiotisKanavos это хороший вопрос, и что вы подразумеваете под «заботой»? – killer