C# разница между Array и int[]
Скажите в чем отличие между
int[] mass = new int[2] {1,2}
Array mass = new int[2] {1,2}
почему я не могу по индексу обращаться к элементам массива типа array?
Ответы (1 шт):
Вот смотрите.
mass - это ссылка на объект, так как массив - это ссылочный тип.
int[] mass = new int[2] {1, 2};
порождает ссылку, которая в памяти выглядит как:
int[] mass ---> int[]
То есть ссылка mass имеет тип int[] и ссылается на объект типа int[].
Array mass = new int[2] {1, 2};
порождает ссылку, которая в памяти выглядит как:
Array mass ---> int[]
То есть в памяти будет все равно int[], но ссылка будет иметь тип родителя Array, и в коде вы сможете с объектом работать только как с Array.
Можно даже так
object mass = new int[2] {1, 2};
object mass ---> int[]
У вас будет mass, но вы вообще не сможете обращаться к данным массива.
Но ситуация в обоих случаях с Array и object не безнадежная, так как можно сделать вот так:
int[] m = (int[])mass;
И получить
int[] m ---> int[]
Даже если mass был object. Главное, что он ссылается на объект нужного типа. Если объект, на который ссылается переменная-ссылка неподходящего типа, то вы при касте получите исключение InvalidCastException.
- Приведение ссылки к типу одного из родителей называется апкаст (upcast). То есть каст по иерархии наследования вверх.
- Приведение ссылки к дочернему типу называется даункаст (downcast). То есть каст по иерархии наследования вниз.