Dynaaminen tietotyypin tunnistus ( esim. r un - time t ype i nformation , r un - time t ype i identifiointi , RTTI ) on joissakin ohjelmointikielissä mekanismi, jonka avulla voit määrittää muuttujan tai muuttujan tietotyypin. objekti ajon aikana.
Tälle mekanismille on monia toteutuksia, mutta yleisimmät ovat:
Siten tyypin määritystoiminto pelkistyy joko hakuun taulukosta tai useiden tavujen hakuun objektin osoittimen osoittamaan osoitteeseen asti. Jokaisella menetelmällä on etunsa ja haittansa[ määritä ] .
C++ : ssa dynaamiseen tyyppitunnistukseen käytetään operaattoreita ja (määritelty typeinfo.h- tiedostossa) [1] , jolle moduulia käännettäessä on yleensä lisättävä ajonaikaiset tyyppitiedot kääntäjän vaihtoehtojen kautta. dynamic_casttypeid
Operaattori dynamic_castyrittää lähettää määritettyyn tyyppiin shekillä. Toiminnon kohdetyypin on oltava osoitin, viittaus tai tyyppi void*.
Operaattori typeid[2] palauttaa viitteen rakenteeseen type_info, joka sisältää kenttiä, joiden avulla voit saada tietoa tyypistä.
Delphi - kääntäjä tallentaa ohjelman suoritettavaan tiedostoon tiedot kaikista siinä käytetyistä luokista. Kun luot mitä tahansa objektia muistissa, ennen sitä (negatiivisilla siirtymillä ) on otsikko, joka sisältää myös linkin tämän objektin luokan rakennekuvaajaan. Kieleen sisäänrakennetut toiminnot toimivat näiden tietojen kanssa läpinäkyvästi ohjelmoijalle. Operaattorin isavulla voit tarkistaa, onko objekti tai tyyppi tietyn tyypin jälkeläinen, ja operaattoria askäytetään objektien tai liitäntöjen lähettämiseen tyypistä toiseen, ja se on vastine C++dynamic_cast : ssa .
Objektiotsikoita - myös implisiittisesti - käytetään automaattiseen muistinhallintaan .
C # käyttää menetelmää objektin tyypin määrittämiseen suoritusaikana GetTypesekä avainsanoja isja , jotka ovat C++as : n vastineet typeidja vastaavasti. dynamic_cast
Javassa objektin tyyppi voidaan saada käyttämällä luokassa ilmoitettua menetelmää, jonka jokainen luokka toteuttaa. Sen tarkistamiseen, kuuluuko objekti tiettyyn tyyppiin, käytetään operaattoria , analogia C++ :sta on tyyppivaluoperaattori, joka tekee poikkeuksen tyyppierojen sattuessa . getClass()java.lang.Objectinstanceofdynamic_castClassCastException
Tavukooditasolla kutsu luokkametodiin kirjoitetaan, kuten kutsu mille tahansa muulle menetelmälle, käyttämällä invokevirtuaalista opkoodia . Instanceof- ja checkcast -operaatiokoodeja käytetään tarkistamaan objektin castability tyyppiin .
Perlissä objektin tyyppi voidaan määrittää käyttämällä blessed()-funktiota, joka on osa Scalar::Util CPAN-moduulia. Funktio vie osoittimen objektiin (siunattu hash tai vastaava) ja palauttaa skalaarin, joka sisältää luokan nimen.
PHP - standardikirjasto määrittelee funktion gettype(), joka palauttaa merkkijonon sisäänrakennetun tyypin nimellä tai merkkijonon, objectjos funktiolle välitetyn argumentin tyyppi on käyttäjän määrittämä luokka.