Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Проверка типа с помощью ключевого слова is

Поиск

С помощью оператора 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 с.)