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 | 2680 (2379) | Spura |
| » | Java program (strani: 1 2 )Oddelek: Programiranje | 10135 (9284) | kunigunda |
| » | C# get/setOddelek: Programiranje | 1264 (1200) | japol |
| » | [Java] Sortiranje objektovOddelek: Programiranje | 3137 (3137) | tjaz24 |
| » | Programski jeziki -FERIOddelek: Programiranje | 1577 (1387) | BigWhale |