![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Приклад класу з перевантаженими методами і операціями
class Demoarray { int[] Myarray;//закритий масив } public static Demoarray operator -(Demoarray x) //перевантаження операції унарный мінус { Demoarray temp = new Demoarray(x.Lengtharray); for (int i = 0; i < x.Lengtharray; ++i) temp[i] = -x[i]; return temp; } public static Demoarray operator ++(Demoarray x) //перевантаження операції инкремента { Demoarray temp = new Demoarray(x.Lengtharray); for (int i = 0; i < x.Lengtharray; ++i) temp[i] = x[i]+1; return temp; } public static bool operator true(Demoarray a) //перевантаження константи true { foreach (int i in a.Myarray) { if (i<0) { return false; } } return true; } public void Print(string name) //метод - виводить поле-масив на екран { Console.Writeline(name + ": "); for (int i = 0; i < Myarray.Length; i++) Console.Write(Myarray[i] + " "); Console.Writeline(); } }
Успадкування класів. Виклик конструкторів при успадкуванні Успадкування, разом з инкапсуляцией і поліморфізмом, є однією з трьох основних характеристик (або базових понять ) об'єктно-орієнтованого програмування. Успадкування дозволяє створювати нові класи, які повторно використовують, розширюють і змінюють поведінку, визначене в інших класах. Клас, члени якого успадковуються, називається базовим класом , а клас, який успадковує ці члени, називається похідним класом . Похідний клас може мати тільки один безпосередній базовий клас. Однак спадкування є транзитивним. Якщо ClassC є похідним від ClassB, і ClassB є похідним від ClassA, ClassC успадковує члени, оголошені в ClassB і ClassA. Концептуально, похідний клас є спеціалізацією базового класу. Наприклад, при наявності базового класу Animal , можлива наявність одного похідного класу, який називається Mammal , і ще одного похідного класу, який називається Reptile . Mammal є Animal таReptile є Animal , але кожен похідний клас представляє різні спеціалізації базового класу. При визначенні класу для наслідування від іншого класу, похідний клас явно отримує всі члени базового класу, за винятком його конструкторів і деструкторів. Похідний клас може таким чином повторно використовувати код в базовому класі без необхідності в його повторної реалізації. У похідному класі можна додати більше членів. Таким чином, похідний клас розширює функціональність базового класу. конструктор базового класу конструює базову частину об'єкта, а конструктор похідного класу - похідну частину цього об'єкта. І в цьому є своя логіка, оскільки базового класу невідомі і недоступні будь-які елементи похідного класу, а значить, їх конструювання має відбуватися окремо. Якщо конструктор визначений тільки в похідному класі, то все відбувається дуже просто: конструюється об'єкт похідного класу, а базова частина об'єкта автоматично конструюється його конструктором, використовуваним за замовчуванням. Коли конструктори визначаються як в базовому, так і в похідному класі, процес побудови об'єкта дещо ускладнюється, оскільки повинні виконуватися конструктори обох класів. В даному випадку доводиться звертатися до ключовим словом base , яке знаходить двояке застосування: по-перше, для виклику конструктора базового класу; і по-друге, для доступу до члена базового класу, який переховується за членом похідного класу. За допомогою форми розширеного оголошення конструктора похідного класу і ключового слова base в похідному класі може бути викликаний конструктор, визначений у його базовому класі. За допомогою ключового слова base можна викликати конструктор будь-якої форми, яка визначається в базовому класі, причому виконуватися буде лише той конструктор, параметри якого відповідають переданим аргументам. А тепер розглянемо коротко основні принципи дії ключового слова base. Коли в похідному класі вказується ключове слово base, викликається конструктор з його безпосереднього базового класу. Отже, ключове слово base завжди звертається до базового класу, що стоїть в ієрархії безпосередньо над зухвалим класом. Це справедливо навіть для багаторівневої ієрархії класів. Аргументи передаються базового конструктору в якості аргументів методу base (). Якщо ж ключове слово відсутнє, то автоматично викликається конструктор, використовуваний в базовому класі за замовчуванням.
![]() |