Identificarea dinamică a tipului de date ( ing. r un- time tip i nformation , r un - time type type i dentification , RTTI ) este un mecanism în unele limbaje de programare care vă permite să determinați tipul de date al unei variabile sau obiect în timpul execuției.
Există multe implementări ale acestui mecanism, dar cele mai comune sunt:
Astfel, operația de determinare a tipului se reduce fie la o căutare în tabel, fie la o căutare de mai mulți octeți până la adresa indicată de pointerul către obiect. Fiecare metodă are avantajele și dezavantajele sale[ specificați ] .
În C++ , operatorii și (definiți în fișierul typeinfo.h ) sunt utilizați pentru identificarea dinamică a tipului [1] , pentru care informațiile de tip în timpul execuției trebuie de obicei adăugate prin opțiunile compilatorului la compilarea modulului. dynamic_casttypeid
Operatorul dynamic_castîncearcă să arunce la tipul specificat cu o verificare. Tipul țintă al operației trebuie să fie un pointer, referință sau tip void*.
Operatorul typeid[2] returnează o referință la o structură type_infocare conține câmpuri care vă permit să obțineți informații despre tip.
Compilatorul Delphi stochează în fișierul executabil al programului informații despre toate clasele utilizate în acesta. La crearea oricărui obiect în memorie, înaintea acestuia (la offset -uri negative ) există un antet, care conține și o legătură către structura-descriptorul clasei acestui obiect. Funcțiile încorporate în limbaj funcționează cu aceste informații în mod transparent pentru programator. Operatorul isvă permite să verificați dacă un obiect sau tip este un descendent al unui anumit tip, iar operatorul aseste folosit pentru a turna obiecte sau interfețe de la un tip la altul, fiind omologul dynamic_castîn C++ .
Anteturile obiectelor - de asemenea implicit - sunt folosite pentru gestionarea automată a memoriei .
C # folosește metoda pentru a determina tipul unui obiect în timpul execuției GetType, precum și cuvintele cheie isși as, care sunt omologii pentru typeidși , respectiv, dynamic_castîn C++ .
În Java, tipul unui obiect poate fi obținut folosind o metodă getClass()declarată într-o clasă java.lang.Objectși, prin urmare, implementată de fiecare clasă. Pentru a verifica dacă un obiect aparține unui anumit tip, se folosește operatorul instanceof, un analog dynamic_castdin C++ este operatorul de tip casting, care aruncă o excepție în cazul unei nepotriviri de tip ClassCastException.
La nivel de bytecode, un apel la o metodă de clasă este scris, ca un apel la orice altă metodă, folosind opcode invokevirtual . Opcode-urile instanceof și checkcast sunt utilizate pentru a verifica caracterul de castabilitate al unui obiect la un tip .
În Perl , tipul unui obiect poate fi determinat folosind funcția blessed(), care face parte din modulul Scalar::Util CPAN. Funcția preia un pointer către un obiect (hash binecuvântat sau echivalent) și returnează un scalar care conține numele clasei.
Biblioteca standard PHP definește o funcție gettype()care returnează un șir cu numele unui tip încorporat sau un șir objectdacă tipul argumentului transmis funcției este o clasă definită de utilizator.