Az öröklés alapjainál szó volt róla, hogy a legtöbb modern nyelvben az ősosztályok száma egyre van korlátozva. Ennek több oka van. C# és Java esetén talán a legfontosabb ok a sebesség.
A .NET nyelvek JIT fordítóval fordulnak gépi kóddá. A fordítás sokkal egyszerűbb és a betöltési sebesség sokkal jobb.
A másik fő ok programozás szempontbeli. Ezt a szakirodalom gyémánt öröklődés problémának hívja. Az angol szakirodalom multiple inheritance, vagy diamond inheritance problémaként ismeri.
A probléma a következő. Tételezzük fel, hogy van egy ős A jelű osztályunk. Az A osztály rendelkezik egy virtuális Foo() metódussal. Az A jelű osztályból örököltetünk két osztályt, amit B és C jellel látunk el. B és C is saját módon felüldefiniálja a Foo() metódust. Ezt követően pedig létrehozunk egy D osztályt, ami C és B osztályokból öröklődik, de nem definiálja felül a Foo() metódust. Ha a D osztályból akarjuk meghívni a Foo() metódust, akkor valójában melyiket kell meghívnia a keretrendszernek?
A probléma leírása igen összetettnek tűnhet, gondolhatnánk azt, hogy a mi kódunkban ilyen nem fordulhat elő. Pedig igenis adódhat az eset. A .NET környezet méretéből adódóan pedig egyszerűen elkerülhetetlen lenne ezen problémába belefutás.
A korábban feltett kérdésre a válasz nem egyértelmű és nincs is rá jó válasz, éppen ezért az eltérő nyelvek eltérőképpen küszöbölik ki a problémát. C# esetén a megoldás az volt, hogy nincs többszörös öröklődés, viszont az ebből származó hátrányok kompenzálására bevezették az interfészeket. Egy osztály csak egy őssel rendelkezhet, viszont korlátlan számú interfészt megvalósíthat. Az interfészekről a későbbiek folyamán lesz szó.