Что такое открытый универсальный тип массива []?

Когда я делаю 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.

Другие вопросы по тегам