A dinamikus adattípus-azonosítás ( angol. r un - time t ype i nformation , r un - time t ype i identification , RTTI ) néhány programozási nyelvben olyan mechanizmus, amely lehetővé teszi egy változó adattípusának, ill. objektum futásidőben.
Ennek a mechanizmusnak számos megvalósítása létezik, de a leggyakoribbak a következők:
Így a típus meghatározásának művelete vagy a táblázatban történő keresésre, vagy több bájtos keresésre redukálódik az objektum mutatója által mutatott címig. Mindegyik módszernek megvannak a maga előnyei és hátrányai[ adja meg ] .
A C++ -ban a ( typeinfo.h fájlban definiált) és operátorok a dinamikus típusazonosításra szolgálnak [1] , amelyhez a modul fordításakor általában a futási típusinformációkat kell hozzáadni a fordító opciókon keresztül. dynamic_casttypeid
Az operátor dynamic_castegy csekk segítségével megpróbál átküldeni a megadott típusra. A művelet céltípusának mutatónak, hivatkozásnak vagy típusnak kell lennie void*.
A typeid[2] operátor hivatkozást ad vissza egy olyan struktúrára type_info, amely olyan mezőket tartalmaz, amelyek lehetővé teszik, hogy információt kapjon a típusról.
A Delphi fordító a program végrehajtható fájljában tárolja a benne használt összes osztály információit. Bármely objektum létrehozásakor a memóriában, előtte (negatív eltolásoknál ) van egy fejléc, amely egy hivatkozást is tartalmaz az objektum osztályának szerkezet-leírójára. A nyelvbe épített funkciók ezekkel az információkkal a programozó számára átláthatóan működnek. Az operátor islehetővé teszi annak ellenőrzését, hogy egy objektum vagy típus egy bizonyos típus leszármazottja-e, és az operátor asaz objektumok vagy interfészek egyik típusból a másikba való átküldésére szolgál, dynamic_casta C++ megfelelőjeként .
Az objektumfejlécek – szintén implicit módon – az automatikus memóriakezelésre szolgálnak .
A C # a metódus segítségével határozza meg az objektum típusát futás GetTypeközben, valamint a kulcsszavakat isés a kulcsszavakat as, amelyek a megfelelői a C++-ban typeidés dynamic_casta C++ -ban.
A Java-bangetClass() egy objektum típusát egy osztályban deklarált metódussal lehet megszerezni, java.lang.Objectés ezért minden osztály megvalósítja. Annak ellenőrzésére, hogy egy objektum egy bizonyos típushoz tartozik-e, az operátort használjuk , a C ++instanceof analógja a típusöntési operátor, amely típus eltérés esetén kivételt dob . dynamic_castClassCastException
A bájtkód szintjén egy osztálymetódus hívása íródik ki, mint bármely más metódus hívása, az invokevirtual opcode használatával . Az instanceof és a checkcast műveleti kódok egy objektum típusba önthetőségének ellenőrzésére szolgálnak .
A Perlben az objektum típusát a blessed() függvénnyel lehet meghatározni, amely a Scalar::Util CPAN modul része. A függvény mutatót mutat egy objektumra (áldott hash vagy azzal egyenértékű), és visszaadja az osztály nevét tartalmazó skalárt.
A PHP szabványkönyvtár definiál egy függvényt gettype(), amely egy beépített típusú sztringet ad vissza, vagy egy karakterláncot, objectha a függvénynek átadott argumentum típusa egy felhasználó által definiált osztály.