Prostredie .NET Framework podporuje len jednoduchú dedičnosť tried, čo odstraňuje veľa problémov spojených s polymorfnými triedami, ktoré dedia z viacerých tried. Tento nedostatok nahradzuje možnosť implementovať v triede neobmedzený počet rozhraní (interfaces).
Každá trieda implicitne dedí zo System.Object. Keď teda vytvoríte triedu, ktorá nededí zo žiadnej, kompilátor sám pridá dedenie zo System.Object.
class SimpleClass {
int x;
public int Value {
get { return x; }
set { this.x = value; }
}
}
Trieda bude skompilovaná, akoby bolo definovaná takto:
class SimpleClass : System.Object {
...
}
Ak nejaká trieda dedí z inej, tak nutne musí získať metódy zo
System.Object. Z tohoto dôvodu sú tiež v každej triede dostupné metódy
ToString()
alebo GetHashCode()
. Je tiež možné si do
typu Object uložiť akýkoľvek objekt.
Object o = new SimpleClass();
ArrayList al = new ArrayList(1);
al.Add(new SimpleClass()); // argument metódy Add je typu Object
Keď chceme pracovať presne s daným dátovým typom uloženým v type Object, je potrebné spraviť pretypovanie (boxing):
Object o = new SimpleClass();
SimpleClass sc = (SimpleClass)o;
V premennej o
je uložený celý object typu
SimpleClass
, ale premenná je deklarovaná ako Object
a teda cez ňu môžeme pristupovať iba k fieldom definovaným v type
System.Object.
Po pretypovaní o
na SimpleClass už môžeme pristupovať
k všetkým fieldom zo SimpleClass.
Trochu viac sa dočítate v dokumente OOP – Boxing.doc. Dokumente je vo formáte Microsoft Word. Ak ho nemáte naišntalovaný, na zobrazenie dokumentu môžete použiť Word Viewer 2003, ktorý je zdarma.