Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Проверка типа с помощью ключевого слова is↑ ⇐ ПредыдущаяСтр 18 из 18 Содержание книги
Поиск на нашем сайте
С помощью оператора i s можно определить, имеет ли рассматриваемый объект заданный тип. Общая форма его записи имеет следующий вид: выражение i s ТИП Здесь тип элемента выражение сравнивается с элементом ТИП. ЕСЛИ ТИП элемента выражение совпадает (или совместим) с элементом ТИП, результат выполнения опера-ции принимается равным значению ИСТИНА. В противном случае — значению ЛОЖЬ. Следовательно, если результат истинен, выражение можно привести к типу, заданному элементом ТИП. Рассмотрим пример использования оператора i s. // Демонстрация выполнения оператора i s. using System; class A {} class В: A {} class Usels { public static void Main() { A a = new A (); В b = new В(); if(a is A) Console.WriteLine("Объект а имеет тип A."); if(b is A) Console.WriteLine("Объект b совместим с типом А, " + "поскольку его тип выведен из типа А."); if(a is В) Console.WriteLine("Этот текст не будет отображен, " + "поскольку объект а не выведен из класса В.") if(b is В) Console.WriteLine("Объект b имеет тип В."); if(a is object) Console.WriteLine("а — это объект."); Результаты выполнения этой программы таковы: Объект а имеет тип А. Объект b совместим с типом А, поскольку его тип выведен из типа А. Объект b имеет тип В. а -- это объект. Несмотря на то что все сообщения в этой программе говорят сами за себя, некото- fbie из них все же требуют пояснений. Обратите внимание на следующую инструкцию: i f (b i s A) Console.WriteLine("Объект b совместим с типом А, " + "поскольку его тип выведен из типа А."); В данном случае i f-инструкция выполнилась успешно, поскольку переменная b является ссылкой типа в, который выведен из типа А. Следовательно, объект b со-вместим с типом А. Однако обратное утверждение не является справедливым. При выполнении строки кода I i f (a is В) Console.WriteLine("Этот текст не будет отображен, " + "поскольку объект а не выведен из класса В."); if-инструкция успехом не увенчается, поскольку объект а имеет тип А, который не выведен из типа в. Следовательно, объект а и класс в несовместимы по типу. Использование оператора as Иногда во время работы программы требуется выполнить операцию приведения типов, не генерируя исключение в случае, если попытка окажется неудачной. Для этого предусмотрен оператор as, формат которого таков: выражение as тип Нетрудно догадаться, что используемый здесь элемент выражение участвует в по-пытке приведения его к типу, заданному элементом тип. В случае успешного выпол-нения этой операции возвращается ссылка на тип. В противном случае возвращаетсянулевая ссылка. Оператор as в некоторых случаях предлагает удобную альтернативу оператору i s. Рассмотрим, например, следующую программу, в которой оператор i s позволяет пре-дотвратить неверное приведение типов: // Использование оператора i s для предотвращения // неверной операции приведения типов. using System; class A {} class В: А {} class CheckCast { public static void Main() { A a = new A(); В b = new В(); // Проверяем, можно ли объект а привести к типу В. if(a is В) // При положительном результате выполняем // операцию приведения типов, b = (В) а; else // В противном случае операция приведения // типов опускается, b = null; if(b==null) Console.WriteLine( "Операция приведения типов b = (В) а НЕ РАЗРЕШЕНА."); else Console.WriteLine( "Операция приведения типов b = (В) а разрешена.") Результаты выполнения этой программы таковы: Операция приведения b = (В) а НЕ РАЗРЕШЕНА. Как подтверждают эти результаты, поскольку тип объекта а не совместим с типом в, операция приведения объекта а к типу в недопустима, и ее выполнение предот-вращается с помощью инструкции if. Как видите, реализация такого подхода требует выполнения двух этапов. Первый состоит в подтверждении обоснованности операции приведения типов, а второй — в самом ее выполнении. С помощью оператора as эти два этапа можно объединить в один, как показано в следующей программе. // Демонстрация использования оператора as. using System; class A {} class В: A {} class CheckCast { public static void Main() { A a = new A(); В b = new В(); b = a as В; // Выполняем операцию приведения типов, // если она возможна. if(b==null) Console.WriteLine("Операция приведения типов " + "b = (В) а НЕ РАЗРЕШЕНА."); else Console.WriteLine( "Операция приведения типов b = (В) а разрешена."); Вот результаты выполнения этой программы: Операция приведения типов b = (В) а НЕ РАЗРЕШЕНА. В этой версии оператор as проверяет допустимость операции приведения типов, а затем, если она законна, выполняет ее, причем все это реализуется в одной инструкции.
|
||||
Последнее изменение этой страницы: 2017-01-19; просмотров: 124; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.223.129 (0.005 с.) |