Az alapelvek a C#-nál és más objektumorientált nyelveknél tárgyaltak szerint értendőek. Property támogatás is rendelkezésre áll ennek mintájára.
A Genie-ben a névterek (namespace) más nyelvektől eltérően nem könytárszerkezethez kötött. Lehetnek osztályba nem tartozó metódusai, ezáltal kiválthatóak a statikus osztályok (amelyeket a nyelv nem támogat).
Egy osztálynál feltüntethető, hogy mely osztályból származik és mely interfészeket valósítja meg.
Metódus módosítók:
Genie-ben vannak kötelező, speciális és opcionális függvény blokkok, amik használhatóak az osztályhoz (is).
Genie-ben bár jelenleg nem adható meg 'final', a jövőben tervezik sealed kulcsszóval ennek támogatását. Nincs névtelen osztály sem benne, de helyette delegate és klósúra felhasználásával megoldhatók az ezt igénylő problémák, sokszor még elegánsabban is.
A nyelv lehetőséget kínál az osztályokon belül tulajdonságok használatára is. Ezek működése a C# tulajdonságokhoz hasonló.
Az első tulajdonságnak nincs megírva getter/setter művelete, így ebből egy privát _name lesz, a másodiknak automatikusan generálódik egy getter (mivel readonly) és a harmadiknak van megírt getter/setter művelete.
Egy specialitás a Genie-ben amit a GObject-től örökölt az, hogy egy osztály metódusokon kívül még tartalmazhat eseménykezelőket is. Ezek úgy jelennek meg mint törzs nélküli metódusok. Példányosítás után lehet őket kötni += operátorral egy delegate-hez.
Kidolgozásra vár...
Genie-ben egyszeres öröklődés van, ahol a Java-val ellentétben az Object bázisosztályt külön jelölnünk kell, és javasolt is a legtöbb osztályunknál.
Metódus felüldefiniáláskor a virtual nem alapértelmezett és az override kulcsszó is kötelező amennyiben szükséges.
Kidolgozásra vár.
Interfész implementálhat statikus (factory) metódust. A benne tartalmazott metódusok nem kötelezően 'abstract'-ak (és Java-val ellentétben itt nem is alapértelmezés!), lehet törzsük, ezáltal mixinként felhasználhatóak.
Interfész nem származtatható (és belőle sem származtathatunk). Ellenben egy úgynevezett követelményként egy másik interfész vagy osztály adható definiáláskor. Egy interfészt egy osztály csak akkor valósíthat meg, ha a követelményként adott összes interfészt megvalósítja, illetve az esetlegesen adott osztályból származtatás is teljesül. Ezzel gyakorlatilag kiváltható az interfészek egymásból származtatása.