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ó.