Методи в Delphi
Delphi за професионалисти. Обектно-ориентираното програмиране
От изложеното по-горе материални читателите научават, че експлоатацията на съоръженията, предоставени от различни видове методи, които се различават разполага наследство изпълнение. Сега е време да се помисли тези методи по-подробно.
Наречен абстрактни методи, определени в този клас, но не съдържат никакви действия, никога не ползвана и трябва да бъдат заменени в потомък класове. Резюме може да бъде само виртуални и динамични методи. Object Pascal В такива методи са обявени със същата директива име. Това е посочено в описанието на метода:
процедура NeverCallMe; виртуален; абстрактно;
В този случай, няма код не е необходимо да се напише този метод. Обадете метод NeverCallMe ще доведе до създаването на извънредна ситуация, която EAbstractError (извънредни ситуации, посветени на гл. 4).
Един пример за клас TField Sec. "Полиморфизъм" на тази глава обяснява защо трябва да се използват абстрактни методи. В този случай, TField клас не се използва по себе си; основната му цел - да бъде предшественик на йерархията на конкретни класове - "полета" и даде възможност да се абстрахират от данни. Въпреки че процедурите параметри showData и описан като TField. но ако го давате на обект от този клас, няма да има изключение наричаме абстрактен метод.
Статичните методи, както и на всяка област се държат по същия начин в потомък обекти: можете да без ограничения да се припокриват старите имена, и по този начин се променя вида на техники. Кодът на новата статичния метод напълно блокира (замества) стария метод код:
процедура SetData (AValue: разширен);
T2ndObj = клас (TlstObj)
процедура SetData (AValue: цяло число);
наследствено SetData (0.99);
В този пример, различни методи наречени SetData присвояват стойности на различните полета с името и. Припокриване (същото име) поле в потомък предшественик N; така, разбира се, две от едно и също име на полето с името аз - е глупост; така че това е направено само за пример.
На практика програмиране е обичайно всички идентификатори в програмата (включително областта на обекти) смислени имена. Това до голяма степен ще улесни работата с изходния код, а не само на други разработчици, но и вас.
Ако мислите, че за горните примери, ясно е, че компилаторът не е възможно да се определи класа на обекта действително се предава в процедура showData. Имаме нужда от механизъм за определяне на това по време на изпълнение. Този механизъм се нарича късно свързване (края на свързване).
Естествено, този механизъм трябва да бъде по някакъв начин свързани с прехвърлени обекта. Той използва виртуален метод маса (Virtual Начин на маса, ВМТ) и масата на динамични методи (Dynamic Начин на маса, DMT).
За да се покрият и виртуални и динамични методи е директивата за пренебрегване. от които (и само с него!), можете да пренебрегнете и двете от тези видове методи. Ето един пример:
процедура VirtMethodl; виртуален;
процедура VirtMethod2; виртуален;
процедура DynaMethodl; динамичен;