Однозначное присваивание и массивы

В массивах правило однозначного присваивания работает несколько иначе. Для массивов как ссылочного, так и структурного типа (то есть содержащих классы и структуры) доступ к элементам массива возможен даже в том случае, если они не были инициализированы.

Допустим, у вас имеется массив типа Complex:

using System;

struct Complex

{

public Complex(float real, float imaginary)

{

this.real = real;

this.imaginary = imaginary;

}

public override string ToString()

{

return(String.Format("({0}, {0})", real, imaginary));

}

public float real;

public float imaginary;

}

class Test

{

public static void Main()

{

Complex myNumber1;

Complex myNumber2;

Complex myNumber3;

myNumber1 = new Complex();

Console.WriteLine("Number 1: {0}", myNumber1);

myNumber2 = new Complex(5.0F, 4.0F);

Console.WriteLine("Number 2: {0}", myNumber2);

myNumber3.real = 1.5F;

myNumber3.imaginary = 15F;

Console.WriteLine("Number 3: {0}", myNumber3);

}

}

Из-за некоторых операций, которые могут выполняться с массивами (например, Reverse()), компилятор не может проследить за выполнением правил однозначного присваивания во всех ситуациях, что приводит к появлению трудноуловимых ошибок. Исходя из этого, компилятор вообще отказывается от проверки.

Предлагаю ознакомиться с аналогичными статьями: