Dynamisk datatypidentifiering ( eng. r un -time ype i nformation , r un - time ype i dentification , RTTI ) är en mekanism i vissa programmeringsspråk som låter dig bestämma datatypen för en variabel eller objekt under körning.
Det finns många implementeringar av denna mekanism, men de vanligaste är:
Sålunda reduceras operationen för att bestämma typen antingen till en uppslagning i tabellen eller till en uppslagning av flera byte upp till adressen som pekaren till objektet pekar på. Varje metod har sina fördelar och nackdelar[ specificera ] .
I C++ används operatorerna och (definierade i filen typeinfo.h ) för dynamisk typidentifiering [1] , för vilken typinformation vid körning vanligtvis behöver läggas till via kompileringsalternativ vid kompilering av modulen. dynamic_casttypeid
Operatören dynamic_castförsöker kasta till den angivna typen med en bock. Måltypen för operationen måste vara en pekare, referens eller typ void*.
Operatorn typeid[2] returnerar en referens till en struktur type_infosom innehåller fält som låter dig få information om typen.
Delphi - kompilatorn lagrar i programmets körbara fil information om alla klasser som används i den. När du skapar ett objekt i minnet, före det (vid negativa förskjutningar ) finns det en rubrik, som också innehåller en länk till strukturdeskriptorn för klassen för detta objekt. Funktioner inbyggda i språket fungerar med denna information transparent för programmeraren. Operatören islåter dig kontrollera om ett objekt eller typ är en avkomling av en viss typ, och operatören asanvänds för att casta objekt eller gränssnitt från en typ till en annan, vilket är motsvarigheten dynamic_casti C++ .
Objekthuvuden - även implicit - används för automatisk minneshantering .
C # använder metoden för att bestämma typen av ett objekt vid körning GetType, samt nyckelorden isoch as, som är motsvarigheter för typeidrespektive dynamic_casti C++ .
I Java kan typen av ett objekt erhållas med en metod som getClass()deklareras i en klass java.lang.Objectoch därför implementeras av varje klass. För att kontrollera om ett objekt tillhör en viss typ används operatorn instanceof, en analog dynamic_castfrån C++ är typgjutningsoperatorn, som kastar ett undantag vid typfel ClassCastException.
På bytekodnivån skrivs ett anrop till en klassmetod, som ett anrop till vilken annan metod som helst, med hjälp av invokevirtual opcode . Förekomsten av och checkcast- opkoder används för att kontrollera ett objekts castbarhet till en typ .
I Perl kan typen av ett objekt bestämmas med funktionen blessed() som är en del av Scalar::Util CPAN-modulen. Funktionen tar en pekare till ett objekt (välsignad hash eller motsvarande) och returnerar en skalär som innehåller klassnamnet.
PHP - standardbiblioteket definierar en funktion gettype()som returnerar en sträng med namnet på en inbyggd typ, eller en sträng objectom typen av argument som skickas till funktionen är en användardefinierad klass.