Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция12 Безопасность 2018.pptx
Скачиваний:
11
Добавлен:
08.12.2019
Размер:
149.48 Кб
Скачать

//наследующий класс

class B1: A

{

//переопределение метода в наследующем классе

public override void show ( )

{

Console.WriteLine("метод, переопределенный в классе B1");

}

}

//наследующий класс

class B2: A

{

//переопределение метода в наследующем классе

public override void show ( )

{

Console.WriteLine("метод, переопределенный в классе B2");

}

}

11

class Demo

{

static void Main( )

{

A objA = new A ();

B1 objB1 = new B1 ();

B2 objB2 = new B2 ();

A refA;

refA = objA;

refA.show(); //версия метода из класса A

refA = objB1;

refA.show(); //версия метода из класса B1

refA = objB2;

refA.show(); //версия метода из класса B2

}

}

}

12

13

В каждом случае вызываемая версия метода определяется динамически

в зависимости от того, на какой объект ссылается переменная refA.

Выбор версии метода зависит

не от типа самой переменной,

а от ее значения – типа объекта, на который она ссылается.

Переопределять виртуальный метод не обязательно.

Если наследующий класс не имеет своей версии виртуального метода,

то используется версия наследуемого класса.

Если бы метод show не был бы переопределен, например, в классе B2,

последняя строчка вывода имела бы вид:

метод, определенный в классе A

14

Идентификация типа во время выполнения программы

Можно использовать одну и ту же переменную

для ссылки на объекты различных типов

Отсюда проблема –

определение типа объекта во время выполнения программы.

В C# есть специальные операторы:

можно проверить на принадлежность к типу,

если это так, то привести к нему

(например, для обращения к методам и свойствам именно этого типа).

15

Оператор проверки типа is

Позволяет проверить принадлежность объекта к определенному типу.

Синтаксис :

expr is type

expr – выражение, тип которого сравнивается с типом type.

Если эти типы совпадают или совместимы,

то оператор возвращает значение true,

иначе оператор возвращает значение false.

Оператор приведения типа as

Выполняет приведение к указанному типу. Если такое приведение невозможно,

это не приводит к исключительной ситуации (ошибке).

Синтаксис :

expr as type

expr – выражение, которое приводится к типу type.

Если приведение прошло успешно,

то возвращается ссылка на тип,

иначе возвращается пустая ссылка.

16

 

Данный оператор эквивалентен следующему:

 

expr is type ? (type) expr : (type) null

 

Пример

Используем класс object, которому наследуют все типы.

using System;

namespace ConsoleApplication5

{

class MyClass1

{

}

class MyClass2

{

}

17

public class IsTest

{

public static void Main()

{

object [ ] myObjects = new object [6];

myObjects[0] = new MyClass1 ( );

myObjects[1] = new MyClass2 ( );

myObjects[2] = "hello";

myObjects[3] = 123;

myObjects[4] = 123.4;

myObjects[5] = null;

18

for (int i=0; i < myObjects.Length; ++i)

{

string s = myObjects [i] as string;

Console.Write ("{0}:", i);

if (s != null)

Console.WriteLine ( "'" + s + "'" );

else

Console.WriteLine ( "not a string" );

}

}

}

}

19

Когда нужно и можно переопределять

методы

Переопределенные методы обеспечивают в

C# поддержку полиморфизма – во время

выполнения программы.

Полиморфизм позволяет определять в наследуемом классе методы,

которые будут общими для всех наследующих классов,

наследующие классы могут определять

свою реализацию

всех или отдельных методов.

В итоге в рамках одного интерфейса представлено несколько методов.

20