Например, в C # массивы имеют свойство Length. Но другие типы коллекций, такие как списки и т. Д., Имеют свойство Count. Есть ли причина, почему эти два разные? Если так, то я хотел бы знать.
c#
programming-languages
history
collections
Arunster
источник
источник
Ответы:
Они названы по-разному, потому что семантически они совершенно разные:
Количество коллекции - это количество элементов, хранящихся в ней в данный момент, которые могут со временем измениться.
Длина массива - это максимальное количество элементов, которые он может содержать (он будет иметь длину 10, даже если вы не сохранили в нем столько элементов) и является неизменным.
Пример:
Если у меня есть ведро, которое может вместить максимум 100 шаров, оно имеет длину 100. Если я положу в него 50 шаров, то у него будет количество 50.
Если я добавлю еще 10 шаров, счет станет 60, но длина все равно 100. Чтобы изменить длину, мне нужно получить другое ведро.
Массив, вероятно, использует слово Length, потому что под капотом он выделяет непрерывный блок (длину) памяти, основанный на емкости, умноженной на размер элемента. Хотя тот факт, что класс List использует «Capacity» для аналогичной (хотя и изменчивой) концепции, предполагает, что массив может использовать слово «Length» по историческим причинам.
источник
T[]
с длиной N всегда хранит ровно N значений типаT
. Семантически, не все эти значения могут быть значимыми (они могут быть,null
например), но они существуют. Это отличается от обычного значения емкости (как,List<T>
например, используется). Ты прав, чтоCount
можешь измениться, аLength
не можешь. Опять же, ничто не обязывает, чтоCount
на самом деле изменится. Это также используется для неизменных коллекций.count
-property.