 
        A C# nyelv támogatja absztrakt adattípusok létrehozását. Létrehozhatunk modulokat,
        ezáltal az egyes típusokat önálló fordítási
        egységekben lehessen megvalósítani. A 2.0-ás verzió óta az osztályokat szétdarabolhatjuk
        fájlokba ( Bővebben ), ezzel a specifikáció
        és a megvalósítás szétválhat külön fordítási egységekbe. A nyelv továbbá támogatja
        a generikus programozást.
    
A nyelv támogatja a reprezentáció elrejtését, ezáltal a nyelv maga biztosítja, hogy az adott típus használója csak a specifikációban megadott tulajdonságokat használhassa ki.
Az osztály lérehozásának szintaxisáról bővebben itt olvashat.
C# -ban az alábbi láthatósági szabályok vannak: