Что такое открытый универсальный тип массива []?
Когда я делаю int[]
, string[]
, T[]
- это общий массив. Массив - это просто объект, как и все остальное.
Так что же является на самом деле открытым универсальным типом []? Я предполагаю, что это просто какой-то синтаксический сахар над чем-то вроде Array<>
но я не смог найти ничего подобного.
Бонусные баллы, если вы можете как-то ответить на этот вопрос перед Джоном Скитом.
4 ответа
Это просто System.Array; это не общее. Смотрите здесь для краткого обсуждения: http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx
Массивы старше, чем дженерики. Массивы доступны начиная с.net 1, а дженерики были представлены только в.net 2. Таким образом, они не являются синтаксическим сахаром над дженериками.
Вместо этого они происходят от Array
и использовать много магии во время выполнения для работы.
Кроме того, массивы ссылочного типа поддерживают некоторые шаблоны отклонений, не поддерживаемые обобщениями. Если я правильно помню, это было сделано для совместимости с Java.
Насколько я знаю, не было бы открытого общего типа Array
; они существовали до появления дженериков в.NET Framework. Массивы просто "странные"; System.Array
Тип существует главным образом для обеспечения функциональных возможностей объектов массива. Только среда выполнения может извлечь из него.
ТЕМ НЕ МЕНИЕ, System.Array
реализует общий IList<T>
, который применяет индексатор. Если вам нужен реферат со строгой типизацией, который будет принимать массив со строгой типизацией, используйте IList.
Это не просто синтаксический сахар, это фактическое наследование класса System.Array.