» »

[C#]Dedovanje

[C#]Dedovanje

abyssus ::

Pozdravljeni,
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).

abyssus ::

Hvala! :)

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.

MrBrdo ::

Aja ups nisem bil pozoren da gre za C# tukaj :) Nevermind.
MrBrdo

JamesBond ::

Zakaj pa izpiše "AA", "AA", "BB" in ne samo "BB"?

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

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] array v voidu

Oddelek: Programiranje
102274 (1973) Spura
»

Java program (strani: 1 2 )

Oddelek: Programiranje
508549 (7698) kunigunda
»

C# get/set

Oddelek: Programiranje
51069 (1005) japol
»

[Java] Sortiranje objektov

Oddelek: Programiranje
192843 (2843) tjaz24
»

Programski jeziki -FERI

Oddelek: Programiranje
51378 (1188) BigWhale

Več podobnih tem