Az IL programozási nyelv

Objektum-orientált programozás

Osztályok

.class kulcsszóval lehet osztályt definiálni a forrásban. Származtatni az extends kulcsszóval lehet, ahol a származtatandó osztály teljes névterét kell megadni. Osztály attribútumai a magas szintű nyelvekből megszokott értékek lehetnek:

Osztályon belül a következő deklarációk lehetségesek:

Szerződések (kis kitérő)

Szerződések bevezetése az eseménykezelés miatt vált szükségessé, ahol típusos pointerkezelést kellett elfedni könnyen kezelhető módon, de ezt kibővítették és univerzálissá tették. A szerződés nem típus. Előfeltétel halmaz egy típus implementálásához. ún. szignatúrákból áll, ami megszorítások gyűjteménye és újabb szignatúrák lehetnek. Ezeket a VES automatikusan ellenőrzi futáskor. Fajtái: típus, hely (pl.: literal szignatúra, ami garantálja, hogy az adott helyen egy beépített típus fix értéke fog szerepelni), helyi (lokális változó), paraméter, metódus. Erre a technológiára a gyorsabb és ellenőrizhetőbb kódfuttatásnál van szükség.

Metódusok

A .method kulcsszó vezeti be, minősítők, majd a neve következik, zárójelek között szerepel a paraméterlista. Metódust lehet osztályon kívül is deklarálni, ekkor globális eljárásként működik. Feldolgozás szempontjából a definiálás a következő sorrendet követi: hívási konvenció + előre definiált attribútumok, minősítők + visszatérési érték + metódus neve. A paraméterlista nem 'tartozéka' a metódusnak IL-ben, mert ez csak a felhasználónak információ, nem a rendszernek, mivel a felhasználó fogja kódból kiolvasni a megfelelő stack elemet. A paraméterek a stackbe kerülnek, ahonnan 0 alapú indexeléssel lehet kiolvasni őket a megfelelő utasításokkal (ldarg, ldc, stb.) Ez a metódus fejléce, ezt a MethodDecl kulcsszóval függetlenül a test résztől is megadhatjuk (elődeklaráció), illetve MethodRef kulcsszóval, ha a metódus más assemblykben vagy modulban szerepel.

A virtuális metódusokat külön kezeli az IL, a meghívásuk is külön kulcsszóval történik (callvirt, ldvirt). Ezek az utasítások felülről kompatibilisek a normál (statikus) metódushívásokkal, használhatók rá. Erre a futásidejű kötés miatt volt szükség. Az .entrypoint kulcsszó szolgál az indítási metódus meghatározására. Minden metódusnál szükséges megadni a maxstack értéket, ami a metódus lefutása alatt használt maximális stack méretet takarja. Ennek érdekessége, hogy nem futási időben használja ki ezt az információt a CLR, hanem a az analízis és verifikálás folyamatában.