Пример 2. Фрагмент кода, демонстрирующий использование оператора is для определения типа вычисляемого выражения.
// динамическая идентификация типов
// определение типа выражения
float x;
// перед использованием, переменные должны быть иницилизированы
x = 3.9f;
// проверка, есть ли выражение типа double
if ((2.5 + x) is double)
Console.WriteLine("Выражение есть типа double");
else
Console.WriteLine("Выражение не имеет тип double");
// Результат - "Выражение есть типа double"
// Определение типа выражения 2*2
if ((2 * 2) is int)
Console.WriteLine("Тип int");
else
if ((2 * 2) is uint)
Console.WriteLine("Тип uint");
else
if ((2 * 2) is long)
Console.WriteLine("Тип long");
else
if ((2 * 2) is byte)
Console.WriteLine("Тип byte");
// Результат - "Тип int"
Как работает оператор is в случае наследования классов? Примеры
Преимущества использования динамической идентификации типов в особенности проявляются в случае наследования классов. Если есть ссылка на базовый класс, то по этой ссылке можно определить тип объекта в иерархии наследования.
Пример 1. Пусть заданы 2 класса, которые образовывают иерархию. Класс BaseClass есть базовой. Класс DerivedClass есть производным от класса BaseClass. С помощью оператора is определяется принадлежность объекта класса заданному типу и совместимость объекта класса с заданным типом.
// базовый класс
class BaseClass
{
public int d;
}
// производный класс от базового класса
class DerivedClass:BaseClass
{
public int dd;
}
Ниже демонстрируется использование объектов базового и производного классов в сочетании с оператором is
// создание объектов классов BaseClass и DerivedClass
BaseClass bc = new BaseClass();
DerivedClass dc = new DerivedClass();
// использование объектов bc и dc
if (bc is BaseClass)
Console.WriteLine("Объект bc есть типа BaseClass");
if (bc is DerivedClass)
Console.WriteLine("Объект bc есть совместим с DerivedClass");
if (dc is BaseClass)
Console.WriteLine("Объект dc есть совместим с BaseClass");
if (dc is DerivedClass)
Console.WriteLine("Объект dc есть типа DerivedClass");
В результате выполнения вышеприведенного кода на экран будет выведено
Объект bc есть типа BaseClass
Объект dc есть совместим с BaseClass
Объект dc есть типа DerivedClass
В строке
...
if (bc is DerivedClass)
Console.WriteLine("Объект bc есть совместим с DerivedClass");
...
значение условия в операторе if равное false, так как объект базового класса не может быть совместим с производным классом. Однако, наоборот, объект производного класса есть совместим с базовым, так как, производный класс расширяет возможности базового класса.
Do'stlaringiz bilan baham: |