должно существовать неявное преобразование элементов класса S в элементы класса T. Заметьте, если S - это родительский класс, а T - его потомок, то для массивов одной размерности остальные условия выполняются. Вернемся теперь к примеру с классами Int[], String[] и Object[]. Класс Int не относится к ссылочным классам, и потому преобразования класса Int[] в Object[] не существует. Класс string является ссылочным классом и потомком класса Object, а потому существует неявное преобразование между классами String[] и Object[]. Правило для явного преобразования можно сформулировать, например, так. Если существует неявное преобразование массива с элементами класса S в массив с элементами класса T, то существует явное преобразование массива с элементами класса T в массив с элементами класса S. Для демонстрации преобразований между массивами написана еще одна процедура печати. Вот ее текст: public static void PrintArObj(string name,object[] A) { Console.WriteLine(name); foreach (object item in A ) Console.Write("t {0}", item); Console.WriteLine(); }//PrintArObj Как видите, формальный аргумент этой процедуры принадлежит классу Object[]. При ее вызове фактическими аргументами могут быть массивы, удовлетворяющие выше указанным условиям. Вот пример кода, в котором вызывается эта процедура. В этом же фрагменте показаны и присваивания массива одного класса другому, где выполняются явные и неявные преобразования массивов. public void TestMas() { string[] winames = {"Т. Хоар", "Н. Вирт", "Э. Дейкстра"}; |