Учебные материалы по математике | Перегрузка методов лекция по ооп | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Перегрузка методов лекция по ооп


Лекция по ООП 30.03.2015.

Виртуальные методы

Определение виртуального метода происходит так:
В базовом методе при описании виртуального метода используется VIRTUAL, а в производном классе, если этот метод переопределяется, то используется OVERRIDE.

Пример 1:
Class A {

public virtual int f() { return 1;}

Class B:A{ // класс В производный от класса А

public override int f() {return 2;}} // переопределение класса

Class C:A {

public override int f() {return 3;}}

public override int f() {return 4;}}

А

В С

D

Разница между виртуальными и не виртуальными методами появляется тогда, когда с объектами производных классов мы работаем с помощью ссылки на базовый класс.

Продолжение примера 1:

A a = new D();

int i = a. f();

С одной стороны виртуальный метод должен быть известен в базовом классе, а с другой стороны его описание берется из производного класса. Поэтому переменная i получит значение 4. Если бы не метод не был виртуальным, то i = 1. Невиртуальный метод определяется классом (типом) ссылки. Виртуальный метод всегда определяется типом (классом) объекта.

C c1 = new E();

C c2 = new M();

C c3 = new L (); — неправильная строчка, ошибка

A: g=1; f=2

C: f=3;

R: g=4;

E: f=5;

F: g=7;

L: g=6

f() – виртуальная, g() – невиртуальная

i1 = c1.g (); //i1 = 1

i2 = c1.f (); // i2 = 5

i3 = c2.f(); // i3 =3

i4 = c2.g (); // i4 = 1

Класс object

System. Object

Класс object считается базовым классом для всех типов, включая и структурные типы. Можно сказать, что все типы от него производны. Класс object содержит несколько виртуальных методов, которые при желании можно переопределить в другие классы.

Пример 2:
Метод ToString, определенный в класс object , возвращает полное название типа объекта, но его часто переопределяют для того, чтобы выводить специальную информацию, например: для встроенных числовых типов метод ToString возвращает значение числовой переменной, записанной в виде строки.

Рассмотрим класс «ветор». Этот класс будет содержать два поля (x, y) в которых будут записаны координаты вектора. Мы переопределим метод ToString для этого класса так, чтобы метод возвращал эти координаты.

class Vector {

public float x;

public float y;

public override string ToString()

{string s= “(“+ x. ToString() + ‘,” + y. ToString() + “)”;

return S;}

}

Ссылки типа object можно использовать при работе с любыми типами.

Преобразование типов. Операторы IS и AS

Пусть А – базовый класс, В – производный.

A a = new B();

Работая с объектом производного класса через ссылку базового класса, нам за одним исключение доступны только члены базового класса.

Для того чтобы работая через ссылку базового класса обратиться к члену производного, нам надо выполнить преобразование типов. Например, если класс В содержит поле Х, то чтобы к нему обратиться, нам надо выполнить следующее:

((B)a).x;

Вторые скобки нужны для того, чтобы преобразование типов выполнить быстрее, чем операцию доступа (ибо у операции доступа бОльший приоритет).

2 способ:

B b = (B)a;

Тогда B. x выполнится.

Если ссылки А и В не связаны наследованием, или ссылка А в данный момент не указывает на объект В, то преобразование| B b = (B)a| вызовет генерацию исключения. Для того, чтобы проверить возможность выполнения операции преобразования типов используется оператор IS.

Вид оператора:

<объект> is <тип>ж

Булев тип

true – если преобразование возможно

false –преобразование невозможно.

if (a is B) B b =(B)a;

Данная строчка спасет нас от генерации исключения, если «а» не указывает на объект типа В.

Есть ссылка а = null (нулевая), то оператор IS вернет значение false.

true – когда а указывает на объект класса В.

Оператор Is работает с любыми типами.

Оператор AS работает только со ссылочными типами. AS выполняет преобразование типов, когда это возможно, и возвращает нулевую ссылку, когда это невозможно.

B b1 = a as B

Проверка того, что ссылка b1 не получила не равна null – задача программиста.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020