В массивах правило однозначного присваивания работает несколько иначе. Для массивов как ссылочного, так и структурного типа (то есть содержащих классы и структуры) доступ к элементам массива возможен даже в том случае, если они не были инициализированы.
Допустим, у вас имеется массив типа 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()), компилятор не может проследить за выполнением правил однозначного присваивания во всех ситуациях, что приводит к появлению трудноуловимых ошибок. Исходя из этого, компилятор вообще отказывается от проверки.
0 коммент.:
Отправить комментарий