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: