Blog gunsmoker lyukú (fordítások) és a virtuális módszerek öröklött

Virtuális módszerek és öröklött

Delphi szokatlanul gazdag nyelv támogatása polimorf viselkedést. A legegyszerűbb és alapvető, amelyek a legtöbb programozó társított polimorfizmus - egy virtuális módszerek.

A virtuális módszer nyilvánították az alap osztály virtuális irányelvet. Az alap osztály lehet egy alapértelmezett megvalósítása virtuális módszer, vagy nem lehet. Ha az alapértelmezett végrehajtás nem, akkor jelölje eljárás elvont (absztrakt irányelv), arra kényszerítve örökösök osztály létrehozására saját végrehajtását a módszer kötelező. Mindez - az alapvető dolgokat, hogy mindenki tudja, Delphi programozók. Attól függően, hogy a végrehajtás (és dokumentációt!) Base osztály örökli az osztály dönthet úgy, hogy hívja az örökölt módszer az elején, mielőtt az intézkedések végrehajtásához, vagy a közepén (ritkán), vagy azt követően a tetteikért, a végén, vagy nem okoz minden . Kétféle módon hívja eljárás öröklött variánsok, a finom különbségek: Ez a kód bizonnyal okoz örökölt módszer Draw alap osztály. Ha a módszer az alap osztály - elvont, a hívás sikertelen, izgalmas EAbstractError kivétel a végrehajtás során (vagy Run-time error 210, ha nem használja kivétellel).

Alternatív hívás szintaxis - csak írjon örökölt;. például: Ez a kód működni fog azonos az előző esetekben, amikor az alap osztály nem tartalmaz absztrakt módszer. Ez a kód is automatikusan létrehoz egy eszköz kódkiegészítés amikor végre egy eljárás cseréje (felül). Ezen kívül azt is használják az IDE, amikor behelyezi a forma felvezető események vizuális örökséget.

Ha az alap osztály módszer elméleti, vagy mint az alap osztály nem tartalmazza a módszer (nem virtuális módszerek), a hívás lesz örökölt noop (No-működés - Hagyja, hogy a szolgáltató). A fordító nem generál kódot hozzá (tehát nem tudod őt egy töréspont). Ez a mechanizmus része a kiváló stabilitás a Delphi nyelv verzióval.

Egy buktató szintaxis örökölt; - nem támogatja a funkciót. A funkciók akkor kell használni explicit szintaxis a nevét, a módszer és annak érveit. Például: Úgy tűnhet, mint a túlzott korlátozás a Delphi nyelv design, de azt hiszem, ez nem véletlen. Az mit jelent ez valószínűleg az, hogy ha TMyClass.MethodC elvont (vagy fog történni a jövőben absztrakt), a megbízás eredményeként a hívás eredménye leszármazott osztály lesz távolítva, ami vezet váratlan meghatározatlan érték. Ez természetesen vezet a rejtett hibákat a kódban.

Úgy vélem azonban, hogy van egy kis rés a szintaxis örökölt hívást. Sok szempontból olyan eljárás, amely kiveszi a paramétereket (és bizonyos esetekben, és var paraméter), úgy viselkedik, mint egy függvény, amely visszaadja eredményeként. Tehát, véleményem szerint, az örökölt szintaxis; Meg kell tiltani, ha hív módszerekkel ki (és esetleg a var) paramétereket. Most már nem. Ez a kód azt jelenti, hogy ha a szülő osztály absztrakt (vagy egyszerűen nem létezik, ha az nem a virtuális módszer), akkor a kimenet paraméter értéke bizonytalan. Véleményem szerint a fordító meg kell tiltaniuk az ilyen kihívásokat örökölte;. igénylő explicit szintaxis öröklött MethodB (A); De a macska már megjelent a táskát, és már túl késő bármit is változtatni - blokkoló ilyen hívások fordítási hibák biztosan fog törni egy csomó kódot, így ez valószínűleg felhívja legfeljebb figyelmeztetés (warning).

Nem tudom, hogyan kell használni a virtuális * oops * irányelv

Köszönjük a cikket érthető. )

Egy buktató szintaxis örökölt; - nem támogatja a funkciót. A funkciók akkor kell használni explicit szintaxis a nevét a módszert és érvek
Őszintén szólva - az első alkalommal, amikor hallom róla. Élveztem ezt a szintaxist és D7, és most - nincs korlátozás. És még a példát lefordul és a várt módon működik

Megértem, hogy egy példányt a régi cikkek A Delphi Magazine (lehet, hogy tévedek, természetesen). De minden esetben az eredeti írták, úgy tűnik, elég hosszú ideig. Ha nem tévedek, ez a viselkedés az volt, hogy a Delphi 4-ig és a Delphi 5 azt eltávolították.

Szöveg döntött, hogy elhagyja a probléma tanulmányozására egy absztrakt módszer működését. Bár most már értem, hogy szükséges hozzá egy megjegyzést.

Egy buktató szintaxis örökölt; - nem támogatja a funkciót.
A Delphi XE így. Vlob kell írni:
Eredmény: = öröklött;
Máskülönben az érték egy bázis osztály nem visszük át.

Használhatsz néhány HTML-címkéket, például:

Kérjük, amennyiben lehetséges, használja a „Név / URL” helyett „Anonymous”. URL egyszerűen elhagyható.

Az üzenet lehet a spamek a spam szűrő - ne aggódj, meg fog jelenni az érvényesítés után.

Keresés a blog