Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Задание 5. Приведение типов массивов.

Задание 1. Класс Array | Задание 2. Массивы как коллекции. Статические методы класса Array. | Задание 3. Класс Object и массивы |


Читайте также:
  1. G. Переживания универсальных архетипов.
  2. I. Задание для самостоятельной работы
  3. I.Задание для самостоятельной работы
  4. III. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
  5. Анализ разницы в алгоритмах для разных поисковых движков и разных типов поиска
  6. Блок 2, задание № 3
  7. Блок 2, задание № 4

Преобразования между классами массивов и родительскими классами Array и Object уже рассматривались. А существуют ли другие преобразования между классами массивов? Что происходит при присваивании x=e; (передаче аргументов в процедуру), если x и e - это массивы разных классов? Возможно ли присваивание? Ответ на этот вопрос положительный, хотя накладываются довольно жесткие ограничения на условия, когда такие преобразования допустимы.

Известно, например, что между классами Int и Object существуют взаимные преобразования - в одну сторону явное, в другую неявное. А вот между классами Int[] и Object[] нет ни явных, ни неявных преобразований. С другой стороны, такое преобразование существует между классами String[] и Object[].

В чем же тут дело, и где логика? Запомните, главное ограничение на возможность таких преобразований состоит в том, что элементы массивов должны иметь ссылочный тип. А теперь притянем сюда логику. Крайне желательно обеспечить возможность проведения преобразований между массивами, элементы которых принадлежат одному семейству классов, связанных отношением наследования. Такая возможность и была реализована. А вот для массивов с элементами значимых типов подобную же возможность не захотели или не смогли реализовать.

Сформулируем теперь точные правила, справедливые для присваивания и передачи аргументов в процедуру. Для того, чтобы было возможным неявное преобразование массива с элементами класса S в массив с элементами класса T, необходимо выполнение следующих условий:

Заметьте, если S - это родительский класс, а T - его потомок, то для массивов одной размерности остальные условия выполняются. Вернемся теперь к примеру с классами Int[], String[] и Object[]. Класс Int не относится к ссылочным классам, и потому преобразования класса Int[] в Object[] не существует. Класс string является ссылочным классом и потомком класса Object, а потому существует неявное преобразование между классами String[] и Object[].

Правило для явного преобразования можно сформулировать, например, так. Если существует неявное преобразование массива с элементами класса S в массив с элементами класса T, то существует явное преобразование массива с элементами класса T в массив с элементами класса S.

  1. Откройте консольное приложение созданное в задании 1;
  2. Добавьте в класс для работы с массивами еще одну функцию печати массива объектов со следующей сигнатурой:

public static void PrintArObj(string name,object[] A)

  1. Реализуйте тело этой функции воспользовавшись циклом foreach;
  2. Протестируйте работу данной функции для массивов различных типов;

 


Дата добавления: 2015-07-11; просмотров: 78 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Задание 4. Массивы Объектов.| Задание 6. Описание класса массива

mybiblioteka.su - 2015-2024 год. (0.006 сек.)