Skip to content

Latest commit

 

History

History
38 lines (25 loc) · 2.69 KB

File metadata and controls

38 lines (25 loc) · 2.69 KB

Приведение типов

Одна из важнейших особенностей CLR — безопасность типов (type safety). Во время выполнения программы среде CLR всегда известен тип объекта. Программист всегда может точно определить тип объекта при помощи метода GetType. Поскольку это невиртуальный метод, никакой тип не сможет сообщить о себе ложные сведения. Например, тип Employee не может переопределить метод GetType, чтобы тот вернул тип SuperHero.

Операторы is и as

Опреатор is проверяет совместимость объекта с данным типом, а в качестве результата выдаёт значение true или false. Оператор is НИКОГДА НЕ ГЕНЕРИРУЕТ ИСКЛЮЧЕНИЕ.

Object o = new Object();

Boolean b1 = (o is Object); // b1 равно true

Boolean b2 = (o is Employee); // b2 равно false

Обычно оператор is используется следующим образом:

if (o is Employee) {

Employee e = (Employee) o;   // Используем e внутри инструкции if 

}

В С# был предложен механизм, который позвляет повышать эффективность приведения типов с помощью оператора as. (Is достаточно затратная поерация, т.к он проходит по всей иерархии типов)

Employee e = o as Employee;

if (e != null) {   

// Используем e внутри инструкции if

  }

В этом коде проверяется совместимость типов. Если типы O и Employee совместимы, as возвращает ненулевой указатель на этот объект. Если нет - возвращает null.

По сути, оператор as отличается от оператора приведения типа только тем, что никогда не генерирует исключение. Если приведение типа невозможно, результатом является null. Если не сравнить полученный оператором результат с null и попытаться работать с пустой ссылкой, возникнет исключение System. NullReferenceException.