Dinamikus adattípus azonosítás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. január 24-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

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.

Megvalósítás

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 ] .

C++

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.

Delphi

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 .

C#

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.

Java

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 .

Perl

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.

PHP

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.

Lásd még

Jegyzetek

  1. Típusok azonosítása futásidőben (lefelé irányuló kapcsolat) . Letöltve: 2010. május 18. Az eredetiből archiválva : 2011. március 14.. 
  2. Podbelsky V. V. 12.6 Dinamikus típusazonosító (RTTI) // C++ nyelv / Rec. Dadaev Yu. G. – 4. kiadás. - M. : Pénzügy és statisztika, 2003. - S. 263-280. — 560 p. - ISBN 5-279-02204-7 , UDC 004.438Si (075.8) LBC 32.973.26-018 1ya173.