Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

Ira.Transform(3);

report(ira);

ira = mapping(new Cube( ), 2);

report(ira);

}

Результаты выполнения программы

:

Данные объекта класса Circle:

Площадь круга: 3,142

Данные объекта класса Circle:

Площадь круга: 28,27

Данные объекта класса Cube:

Объем куба: 8

В методе Main( ) ссылка ira с объявленным типом IGeo связана с объектом

класса Circle, который она "представляет" в обращениях к статическому методу

report( ) и в вызове нестатического метода transform(). Первый аргумент метода

mapping( ) – вновь созданный объект класса Cube. По умолчанию у этого объекта-

куба ребро равно 1. Результат выполнения статического метода mapping()

присваивается ссылке ira, после чего она ассоциирована с изменённым объектом

класса Cube. Во всех использованиях интерфейсной ссылки ira проявляется её

динамический тип, и этот тип не остаётся постоянным во время исполнения

программы. Результаты выполнения программы дополняют сказанное.

Так как интерфейс является типом, то можно определять массивы с

элементами, имеющими тип интерфейса. Элементам такого массива можно

присваивать как значения интерфейсных ссылок, так и значения ссылок на объекты

любых классов, реализующих данный интерфейс. В следующей программе

(14_05.cs) определён массив типа IGeo[ ] и именующая его ссылка iarray. Элементам

массива присваиваются значения ссылок на объекты классов Circle и Cube. Код без

объявлений интерфейса, классов и статических методов report() и mapping():

public static void Main()

{

IGeo[ ] iarray = new IGeo[4];

IGeo ira = new Circle();

iarray[0] = ira;

Ira.Transform(3);

iarray[1] = ira;

ira = mapping(new Cube( ), 2);

iarray[2] = ira;

iarray[3] = new Circle( );

foreach(IGeo obj in iarray)

report(obj);

}

Результаты выполнения программы:

Данные объекта класса Circle:

Площадь круга: 28,27

Данные объекта класса Circle:

Площадь круга: 28,27

Данные объекта класса Cube:

Объем куба: 8

Данные объекта класса Circle:

Площадь круга: 3,142

В методе Main( ) элементам массива присвоены ссылки на объекты разных

классов. Затем в операторе foreach с помощью ссылки типа IGeo перебираются

значения всех элементов массива и для каждого из них вызывается статический

метод report(). Обратим внимание на выводимые результаты и последовательность

присваивания значений элементам массива. Ссылка IGeo ira при объявлении

адресует объект класса Circle, и её значение присвоено элементу iarray[0]. Затем

оператор ira.transform(3) изменяет объект, связанный со ссылкой ira, и её значение

присваивается элементу iarray[1]. Таким образом значения элементов iarray[0] и

iarray[1] равны и оба элемента адресуют уже изменённый объект класса Circle.

Оператор ira=mapping(new Cube(),2); присваивает интерфейсной ссылке ira адрес

модифицированного объекта класса Cube. После этого присваивается значение

элементу iarray[2]. Наконец элементу iarray[3] присваивается ссылка на новый

объект класса Circle. Таким образом, в программе определены 3 объекта,

адресуемые четырьмя элементами массива.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky