русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Робота з об'єктами через інтерфейси. Операції is і as


Дата додавання: 2014-10-02; переглядів: 743.


 

При роботі з об'єктом через об'єкт типу інтерфейсу буває необхідно переконатися, що об'єкт підтримує даний інтерфейс. Перевірка виконується за допомогою бінарної операції is. Ця операція визначає, чи сумісний поточний тип об'єкту, що знаходиться зліва від ключового слова is, з типом, заданим праворуч.

Результат операції рівний true, якщо об'єкт можна перетворити до заданого типу, і false – в іншому випадку. Операція зазвичай використовується в наступному контексті:

 

if ( об’єкт is тип )

{

// виконати перетворення "об'єкту" до "типу"

// виконати дії з перетвореним об'єктом

}

Допустимо, ми оформили якісь дії з об'єктами у вигляді методу з параметром типу object. Перш ніж використовувати цей параметр усередині методу для звернення до методів, описаних в похідних класах, потрібно виконати перетворення до похідного класу. Для безпечного перетворення слід перевірити, чи можливо воно, наприклад так:

 

static vod Act(object A)

{

if ( A is IAction )

{

IAction Actor = (IAction) A;

Actor.Draw();

}

}

У метод Act можна передавати будь-які об'єкти, але на екран будуть виведені тільки ті, які підтримують інтерфейс IAction.

Недоліком використання операції is є те, що перетворення фактично виконується двічі: при перевірці і при власне перетворенні. Ефективнішою є інша операція - as. Вона виконує перетворення до заданого типу, а якщо це неможливо, формує результат null, наприклад:

 

static void Act(object A)

{

IAction Actor = A as IAction;

if (Actor != null )Actor.Draw();

}

 

Обидві розглянуті операції застосовуються як до інтерфейсів, так і до класів.


<== попередня лекція | наступна лекція ==>
Реалізація інтерфейсу | Інтерфейси і спадкоємство


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн