Forum » Programiranje » [C#]Dedovanje
[C#]Dedovanje
abyssus ::
Pozdravljeni,
imam samo eno vprašanje glede ene kode.
KODA:
Zakaj ta koda izpiše tekst "BB"? Nekako bi pričakoval izpis "AB", ker se objektB priredi objektuA in šele nato inicializiramo objektB.ime na tekst "B". A se s tem inicializira tudi objektA.ime na tekst "B". Prosim za rahlo razlago, ker mi res ni jasno.
imam samo eno vprašanje glede ene kode.
KODA:
class A { public string ime; public A() { ime = "A"; } } class B : A { } static void Main(string[] args) { A objektA = new A(); B objektB = new B(); objektA = objektB; objektB.ime = "B"; Console.WriteLine(objektA.ime + objektB.ime); }
Zakaj ta koda izpiše tekst "BB"? Nekako bi pričakoval izpis "AB", ker se objektB priredi objektuA in šele nato inicializiramo objektB.ime na tekst "B". A se s tem inicializira tudi objektA.ime na tekst "B". Prosim za rahlo razlago, ker mi res ni jasno.
- spremenilo: abyssus ()
Qcube ::
Prvo, ta koda izpiše "AA", "AA", "BB".
Vse kar ustvariš z new X() se v spremenljivki shrani kot kazalec. To pomeni, da ko si naredil objektA = objektB; sta objektA in objektB dejansko na isti lokaciji v ramu, torej sta isti objekt in objektA več ne obstaja (če smo natančni še obstaja samo nič več ne kaže na njega).
Vse kar ustvariš z new X() se v spremenljivki shrani kot kazalec. To pomeni, da ko si naredil objektA = objektB; sta objektA in objektB dejansko na isti lokaciji v ramu, torej sta isti objekt in objektA več ne obstaja (če smo natančni še obstaja samo nič več ne kaže na njega).
MrBrdo ::
btw če kej takega narediš se moraš zavedat, da ni vredu zgubit vseh kazalcev na nekaj... najprej moraš sprostit pomnilnik, ki si ga alociral z new. tako da preden narediš objectA = objektB bi moral naredit "delete objektA;", da sprostiš pomnilnik. ker ko izgubiš kazalec imaš potem memory leak.
MrBrdo
darkolord ::
Ne drži, Garbage Collector šteje reference in ko pride do 0, čez nekaj časa sprosti pomnilnik.
Izjema so objekti, ki delajo z unmanaged resourci - ti "morajo" implementirati metodo (Dispose) za sproščanje pomnilnika.
Izjema so objekti, ki delajo z unmanaged resourci - ti "morajo" implementirati metodo (Dispose) za sproščanje pomnilnika.
abyssus ::
Prej sem mel še dva izpisa vmes in je zato izpisalo AA AA. Sem potem uredil post pa ta dva izpisa izbrisal.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] array v voiduOddelek: Programiranje | 2274 (1973) | Spura |
» | Java program (strani: 1 2 )Oddelek: Programiranje | 8549 (7698) | kunigunda |
» | C# get/setOddelek: Programiranje | 1069 (1005) | japol |
» | [Java] Sortiranje objektovOddelek: Programiranje | 2843 (2843) | tjaz24 |
» | Programski jeziki -FERIOddelek: Programiranje | 1378 (1188) | BigWhale |