Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_(2модуль)_v_0_3.doc
Скачиваний:
0
Добавлен:
13.09.2019
Размер:
167.94 Кб
Скачать
  1. Переопределение виртуальных функций в с#.

Віртуальними методами називаються такі функції, які оголошуються як virtual в базовому класі. Віртуальні методи відрізняються тим, що вони можуть бути перевизначені в одному або декількох похідних класів.

Особливості С#: перед всіма методами у похідному класі які будуть перевизначати метод базового класа ми повинні писати override.

Приклад:

class base_class

{ public virtual void metod()

{Console.WriteLine(“Метод Базовий!”); }

}

class Class1_class: base_class

{ public override void metod()

{Console.WriteLine(“Метод Class1!”); }

}

…// в основній програмі

base_class obj_base=new base_class();

Class1_class obj_class1=new Class1_class();

base_class REF; //посилання на базовий клас

REF=obj_base;

REF.metod();

REF=obj_class1;

REF.metod();

Результат виконання програми на С#:

Метод Базовий!

Метод Class1!

  1. Абстрактные классы. Чистые виртуальные функции.

Коли у віртуальній функції базового класу відсутня значима дія, в будь-якому класі, похідному від цього базового, така функція обов'язково повинна бути перевизначена. Для реалізації цього положення в C підтримуються так звані чисті віртуальні функції (pure virtual function).

Чисті віртуальні функції не визначаються в базовому класі. туди

включаються тільки прототипи цих функцій. Для чистої віртуальної

функції використовується така основна форма:

virtual тип имя_функции (список_параметров) = 0;

Ключовий частиною цього оголошення є прирівнювання функції нулю.

Це повідомляє компілятору, що в базовому класі не існує тіла функ-

ції.

Якщо клас містить хоча б одну чисту віртуальну функцію, то про нього говорять як про абстрактне класі (abstract class). Оскільки в абстрактному класі міститься, принаймні, одна функція, у якої відсутня тіло функції, технічно такий клас неповний, і ні одного об'єкта цього класу створити не можна. Таким чином, абстрактні класи можуть бути лише успадкованими. Вони ніколи не бувають ізольованими.

В С# абстрактний клас описується так:

abstract class name_class {}

  1. Интерфейсы. Общие положения.

Интерфейс определяет набор методов, которые будут реализованы классом. Сам интерфейс не реализует методы. Таким образом, интерфейс — это логическая конструкция, которая описывает методы, не устанавливая жестко способ их реализации.

Интерфейсы объявляются с помощью ключевого слова interface:

interface имя

{

тип имя(список_параметров);

тип имя(список_параметров);

//…

тип имя(список_параметров);

}

// в реале пишется public перед интерфейсом

В классе:

Class имя: имя_интерфейса

{

//тело класса

}

Один интерфейс может наследоватся нескольками классами.

Это позволяет сказать: «один интерфейс, много методов»

  1. Реализация интерфейсов. Использование интерфейсных ссылок.

Чтобы реализовать интерфейс нужно указать его имя, после имени класса подобно тому, как при создании производного класса указывается базовый класс.

Class имя: имя_интерфейса{

// тело класса

}

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

Так же можно объявит ссылочную переменную интерфейсного типа.Такая переменная может ссылатся на любой обяект, который реализует ее интерфейс.

Public interface inter{

Void show();

}

public my_class{

int x;

my_class(int i){x=i;}

public show(){Console.Write(“x={0}”,x);}

}

main(){

inter a;

my_class b = new my_class(5);

a=b;

a.show();

}

//виведе 5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]