Что такое открытый универсальный тип массива []? - PullRequest
3 голосов
/ 05 марта 2011

Когда я делаю int[], string[], T[] - это универсальный массив. Массив - это просто объект, как и все остальное.

Так, каков на самом деле открытый универсальный тип []? Я предполагаю, что это просто какой-то синтаксический сахар над чем-то вроде Array<>, но я не смог найти ничего подобного.

Бонусные баллы, если вы можете как-то ответить на этот вопрос перед Джоном Скитом.

Ответы [ 4 ]

7 голосов
/ 05 марта 2011

Это просто System.Array; это не общее. Смотрите здесь для краткого обсуждения: http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx

4 голосов
/ 05 марта 2011

Массивы старше, чем дженерики. Массивы доступны начиная с .net 1, а дженерики были представлены только в .net 2. Таким образом, они не являются сахаром синтаксиса поверх дженериков.

Вместо этого они происходят от Array и используют много магии во время выполнения.

Кроме того, массивы ссылочного типа поддерживают некоторые шаблоны отклонений, не поддерживаемые обобщениями. Если я правильно помню, это было сделано для совместимости с Java.

3 голосов
/ 05 марта 2011

Насколько я знаю, не было бы открытого универсального типа Array; они существовали до появления дженериков в .NET Framework. Массивы просто "странные"; тип System.Array существует главным образом для обеспечения функциональности O-O для объектов массива. Из него может извлечь только среда выполнения.

ОДНАКО, System.Array реализует универсальный IList<T>, который применяет индексатор. Если вам нужен реферат со строгой типизацией, который будет принимать массив со строгой типизацией, используйте IList.

1 голос
/ 05 марта 2011

Это не просто синтаксический сахар, это фактическое наследование класса System.Array.

...