Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[C#]Sta su reference ???

[es] :: .NET :: .NET Desktop razvoj :: [C#]Sta su reference ???

Strane: 1 2

[ Pregleda: 12212 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon [C#]Sta su reference ???07.07.2007. u 20:10 - pre 203 meseci
literatura koju koristim je na engleskom pa nisam bas 100% siguran u neke stvari, a reference mi deluju najkomplikovanije do sada..
Dobro za vrednosne tipove sam razumeo oni sadrze vrednosti direktno, ali referentni tipovi me ubise.
"...kada deklarisete promenljivu krug kompajler ne genirise kod koji alocira memoriju za krug vec joj samo dodeli mali deo memorije koji ce pokazivati na adresu (reference to) drugi blok memorije koji sadrzi krug..."
..."memorija za objekat krug je alocirana kada se iskoristi new da se napravi objekat..." ovde me zbuni cas prica o krugu kao klasi, a onda o objektu krug?!
Da ne zamaram uglavnom moze li neko da me uputi da bar znam na sta da obracam posebno paznju kad ucim o ovome, ili ukratko da mi objasni sta su reference (cemu sluze)?
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???07.07.2007. u 21:40 - pre 203 meseci
nije da se ne trudim...

imam klasu student(ime(), prezime(), index()...)

kada u programu napravim >>student vlada;<< ovde se zbunim, da li se u memoriji vec nalazi klasa student, i objekat vlada je rekao klasi mozda cu da te iskoristim, iz cega sledi:

>>vlada = new student()<< predpostavljam da je ovo sada onaj deo u kome je promenljivi vlada zauzeo memoriju u celosti koliko mu pripada.
Posle ovoga vlada sadrzi referencu na clanice klase student i moze da ih koristi:
vlada.ime = "pera";
vlada.index = 12345;

???
 
Odgovor na temu

Gosovic
Sasa Gosovic
Beograd

Član broj: 24224
Poruke: 68
*.dynamic.sbb.co.yu.



Profil

icon Re: [C#]Sta su reference ???07.07.2007. u 22:18 - pre 203 meseci
Iz klase se prave objekti. Klasa sama za sebe ne zauzima nikakvu memoriju.

Dakle, imas klasu 'student' i od nje napravis dva objekta

vlada = new student()
pera = new student()

ta dva objekta su medjusobno nezavisna, svaki trosi memoriju za sebe i imaju istu funkcionalnost



Sto se tice referenci, za objekte vlada i pera referenca je klasa student. Bez nje ni oni ne mogu biti kreirani.
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
*.ptt.yu.



+3 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 08:25 - pre 203 meseci
Nisam siguran da si mu tacno objasnio.

MojaKlasa prva = new MojaKlasa(); // zauzeta memorija
MojaKlasa druga = prva; // referenca na prvu

Sada kad na prvoj promenis recimo prva.Ime = "Test" pa pozoves druga.Ime dobices "Test" ponovo. Ista memorijska lokacija, prva je zauzela a druga referencira prvu.
 
Odgovor na temu

Gosovic
Sasa Gosovic
Beograd

Član broj: 24224
Poruke: 68
*.dynamic.sbb.co.yu.



Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 09:14 - pre 203 meseci
Slazem se da nisam dovoljno pazljivo procitao pitanje, ja sam mislio na reference koje se dodaju projektu.

U vezi pitanja Valerij Zajcev-a, mozda moze ovo da pomogne
http://msdn2.microsoft.com/en-us/library/aa903254(VS.71).aspx
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 11:09 - pre 203 meseci
Vrednosni tipovi se čuvaju na stek memoriji, koja je relativno mala. Zato se u njoj ne čuvaju objekti, već samo reference, dok se "pravi" objekti nalaze na heap memoriji - veeelikom skladištu.
Kada kaže "za objekat krug", misli na "objekat tipa krug", na konkretan krug, koji je inicijalizovan sa nekim vrednostima (npr. centar i poluprečnik). Sa new se alocira memorija na heap-u, a kasnije je "puniš" podacima objekta.

[Ovu poruku je menjao maksvel dana 08.07.2007. u 14:01 GMT+1]
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 13:55 - pre 203 meseci
Code:
{
            krug c;
            c = new krug(42);
            krug refc = c;
            Console.WriteLine(c);
            Console.WriteLine(refc);
        }

A sta mi znaci izlaz ovoga?

output
Code:
reference.krug

tj. zasto ne dobijam vrednosti 42, i da li shvatam sustinu referenca treba da pokazuje na neki drugi objekat i na njegove vrednosti?

edit
Postajem dosadan, ako imam neku promenljivu sa nekom vrednostu, i prosledim je kao parametar nekom metodu i on ga obradi (primer prosledim i, a u metodi imam i++) nije se promenio glavni parametar ali ovaj u metodu ostaje isti, ako je ovo ispravno zasto bih ja ovo kog djavola radio???

[Ovu poruku je menjao Valerij Zajcev dana 08.07.2007. u 15:25 GMT+1]
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.44.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 17:20 - pre 203 meseci
Pa vidiš postoje referencijalni i vrednosni tipovi podataka. Postoje i pointerski al to sad nije bitno.
Svaki objekat klase kojeg u C# jeziku napraviš je referencijalan. Vidi ovako:

Student pera = new Student();
Student djoka = pera;
pera.Godine = 20;

U prvoj liniji se( pomoću "new") rezerviše određeno mesto u heap-u za novi objekat koji je tipa "Student" i vraća se referenca na taj novokreirani objekat. Zatim se u ref. "pera"smešta rešerenca na taj novokreirani objekat. Na ovaj način ti možeš da pristupiš memoriji na heap-u na kojoj se nalazi novokreirani objekat i da mu menjaš vrednosti( to je ono iz treće linije koda).
U drugoj liniji si napravio novi referencijalni tip koji se zove "djoka" i postavio ga da "pokazuje" na isto mesto u memoriji na koje pokazuje i "pera". Samim tim, oni koriste istu memoriju pa ako promeniš "Godine" pomoću "pera" onda će i "djoka" da ima isto 20 godina...

Nasuprot referencijalnim tipovimam postoje već pomenuti vrednosni. To su int, float, double i ostali ugrađeni( string je referencijalni ali se ponaša kao vrednosni). Oni se smeštaju na stek, pa ako napišeš:
Code:

int x, y; //napravio si dva nova objekta, nedodelivši im nikakvu vrednost
x = 15; //dodeljuješ vrednost prvom objektu
y = x; //KOPIRAŠ prvi objekat u drugi, nema nikakvih referenci i zato su oni potpuno "razdvojeni( svaki ima svoju memorijsku lokaciju koju koristi)
y = 69; // dodeljuješ vrednost promenljivoj Y, a pošto ona ne koristi istu memoriju kao i X, X će imati staru vrednost a to je 15


 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 18:29 - pre 203 meseci
dobro sad mi je to jasno, samo mi jedno ne deluje logicno:
ako ja mogu da uradim
pera.godine = 5; //onda pera ima 5 godina
djoka.godine = 6; //onda i pera i djoka imaju po 6 godina jel da?
moje pitanje je cemu onda djoka ako godine mogu da se promene i preko pere, zasto bih bilo sta od toga radio???
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9441
*.eunet.yu.



+10242 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 18:54 - pre 203 meseci
Hm, ajde da vidimo da li si shvatio.

Ako je

Student pera = new Student();
Student djoka = new Student();
pera.Godina = 3;
djoka.Godina = 2;

onda svako ima svoje godine i nema frke;

Ali ako :

Student pera = new Student();
Student djoka = pera;
pera.Godina = 3;

onda je ovde i djoka na trecoj godini. Naravno, ovo je sasvim zvezebe i nemas potrebe da ovo radis. Mislim, mozes, ali sta ce ti dve promenljive, tj. dve reference na isti objekat.

Mozda ces lakse i lepse da svaris te reference na sledeci nacin:

Student pera = new Student();
PostaviOsnovneVrednosti(pera);
// 1

.
.
.
.
.

private void PostaviOsnovneVrednosti(Strudent stud) {
stud.Godinestudija = 4;
// 2

}


Sta je poenta ovde ? Funkcija PostaviOsnovneVrednosti je void. Ali u posle programske linije //1 pera vec ima poslavljene godine studiranja, jer je funkciji PostaviOsnovneVrednosti poslata referenca na objekat a ne sam objekat. I taj objekat je promenjen.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 19:54 - pre 203 meseci
Code:
class Program
    {
        static void Main(string[] args)
        {
            Student vlada = new Student(); // vlada je ref i pokazuje na objekat u heapu (Student)
            Console.WriteLine(vlada.getGodina); //0
            Student.postaviOsnovneVrednosti(vlada); //referenca vlada se prosledjuje metodu
            Console.WriteLine(vlada.getGodina); //2
            vlada.getGodina = 3;
            Console.WriteLine(vlada.getGodina); //3
        }
        class Student
        {
            private int godinaStudija;
            public int getGodina
            {
                get { return godinaStudija; }
                set { godinaStudija = value;}
            }
            public static void postaviOsnovneVrednosti(Student std) //vlada je sada std
            {
                std.godinaStudija = 2; //vlada je na drugoj godini studija
            }


        }

Sad se vec osecam glupo.
1) Ja sam do sada mislio da je vlada objekat ali ispade da je referenca?
2) u liniji sa funkcijom prosledio sam "vlada" tj "referencu" iz prve linije koja ide tamo i dobija vrednost godine 2 jel to ok?
3) ako je sve u redu to gore cemu onda ona linija sa funkcijom kad svejedno je da li je pozvana funkcija ili jednostavno dodeljena nova godina sa vlada.getGodina = 4;?
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.148.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 21:07 - pre 203 meseci
Ma vidi, najbolje da gledaš na to ovako: kad napraviš Objekat referentnog tipa, na primer:
Student pera = new Student();
"pera" mi je referenca na mesto gde je smešten novokreirani objekat. Dakle new napravi objekat i snimi ga u memoriju a ti preko "pera" pristupaš tom objektu.

Ovo pod 2 si OK shvatio.

3. Recimo da imaš neku funkciju koja mora da odradi nešto sa npr TextBox kontrolom, dakle kao parametar toj funkciji moraš da proslediš TextBox kontrolu. Ako ta kontrola ima na primer 100 000 znakova, kopiranje bi bilo sporo, pa ti proslediš referencu i ništa se ne kopira i sve radi veoma brzo + moći ćeš da menjaš izgled i sva ostala podešavanja te prosledjene TextBox kontrole. Ovo ima i loših strana, ali to nije tema...
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 21:34 - pre 203 meseci
Znaci kada radim sa referencama podatke na koje ukazujem obradjujem u void funkcijama, tj. ne vracam vrednost vec direktno manipulisem podacima te mi se na taj nacin program brze izvrsava.
to je onda ovo:
Code:

int x = 5;
int y = x; // y je sada 5
x++; // nema efekta na y

a kod referenci:
Code:

broj x = new broj();
broj y = x; // y je referenca na referencu(x) na objekat
y.vrednost = 8; // sada je referenca x = 8

Ovo deluje bezveze sada ali kapiram da ce na nekom vecem programu kada treba da se stedi memorija da zatreba. Voleo bih da me neko ispravi ako opet gresim u shvatanju

 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.179.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: [C#]Sta su reference ???08.07.2007. u 21:58 - pre 203 meseci
Dobar si, dobar si
Eh da si se "bahćo" sa C/C++ jezikom sad bi mnogo lakše i "šire" uviđao ove stvari

 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9441
*.eunet.yu.



+10242 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 10:37 - pre 203 meseci
Pa i grešiš. Nije poenta u štednji memorije. Poenta je da objeka stoji negde u memoriji, i tom objektu pristupaš preko reference. Ako je objekat, na primer neki spsak, ti pozoveš funkciju koja štampa spisak i proslediš joj referencu.
Dakle, nešto kao: "naštampaj spisak, koji ćeš naći preko ove reference ... "


OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
213.244.197.*

Sajt: www.articles411.com


+8 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 12:17 - pre 203 meseci
A šta sam ja rekao? :)
Znači prosleđuješ referencu, a ne kopiraš sam objekat. Na taj način se proces ubrzava, zar ne?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 13:39 - pre 203 meseci
Citat:
toxi_programer: A šta sam ja rekao? :) Znači prosleđuješ referencu, a ne kopiraš sam objekat. Na taj način se proces ubrzava, zar ne?
Pa posto u NETu ne postoji prosledjivanje objekata po vrednosti, taj deo rasprave je besmislen.

@Valerij: stvarno reference nemaju nikakve veze sa stednjom memorije, one su jednostavno instrument koji ti omogucava da pristupis objekatu, kao sto ti toxi i Java objasnise. Vazno je da skontas prirodu te relacije, svaka referenca pokazuje na tacno nula (null) ili jedan objekat u zavisnosti od toga da li je inicijalizovana, dok obrnuto ne vazi, na jedan objekat moze da pokazuje od jedne do "beskonacno" referenci (ako ni jedna referenca vise ne pokazuje na objekat onda je objekat "izgubljen" i bice pociscen od strane GCa).

Jedini (legalni) nacin da u .NETu preneses objekat u neki metod je po referenci, .NET ti ne omogucava da naprvis kopiju objekta i da u metodi radis nad kopijom. Samim tim svaka promena nad objektom unutar funkcije je automatski vildjiva kroz SVE reference koje na taj objekat pokazuju. Da li je to dobro ili lose zavisi iskljucivo od dizajna tvog programa.
Ova varka (da se po defaultu value tipovi prenose po vrednosti a referentni po referenci) je ono sto zbunjuje dosta ljudi, jer se fundamentalno protivi zdravom razumu :)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 15:14 - pre 203 meseci
Znaci sad referenca sluzi da se objekat prenese u metod?
Code:
static void Main(string[] args)
        {
            Broj celobrojan = new Broj(); //celobrojan je referenca na nov objekat
            Console.WriteLine(celobrojan.setBroj); //prikazuje broj 0 (automatska dodela)
            refBroj.refPromeniBroj(celobrojan); /*pozivam klasu refBroj i njen metod 
           kome prosledjujem referencu "celobrojan" kao novu referencu Broj parametar u kome menjam broj
            sada mi je celobrojan = 8 {OVAJ KORAK JE TAJ KOJI ME ZBUNI}*/
            Console.WriteLine(celobrojan.setBroj);
        }
        class Broj
        {
            public int setBroj;      

        }
        class refBroj
        {
            public static void refPromeniBroj(Broj parametar)
            {
                parametar.setBroj = 8;
            }
        }

Znaci ja sam mogao da kazem celobrojan.setBroj = 8; ali onda to nije po referenci ali "istu" tu stvar treba da uradim tako sto cu da prosledim objekat nekom metodu i unutar tog metoda da menjam vrednost broja tj. ovog propertija iz klase Broj. Zasto mi je onda trebala ova druga klasa refBroj? I krunisano pitanje zasto sam sve ovo radio kad je moglo celobrojan.setBroj = 8;
Ovaj primer sam malo preradio ali nikako ne shvatam cemu?

[Ovu poruku je menjao Valerij Zajcev dana 09.07.2007. u 16:54 GMT+1]
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 16:43 - pre 203 meseci
Mah, ne sluzi referenca nicemu. Ili bolje receno sluzi svemu :)
Uvek se to tako radi, imas objekat kreiran u memoriji i reference na njega i ti uvek u kodu pises imena referenci. Nezavisno od toga gde to koristis. To sto se tokom teme navodilo su samo posledice takvog pristupa, ne razlog za njega.
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: [C#]Sta su reference ???09.07.2007. u 17:22 - pre 203 meseci
U redu je mislim da sam sam poceo da se snalazim, nego...
1) ako prosledim neki argument metodu a on je value tipa(int i) metod ce da ga recimo inkrementira ali nece promeniti argument vec samo parametar tako da ce mi i u Main() funkciji i dalje biti ona prva vrednost. Sem ako upotrebim (ref int i) cime menjam i parametar i argument, a prazan prosledjujem kroz (out int i)

2) Objekat je "reference type" i kada njega prosledim metodu, i nesto na njemu promenim proemnio sam ono na sta referenca ukazuje, i zato mi ne treba ref ni out, jer objekat mogu i bez vrednosti da prosledim.

Ako nije ovo dobro onda ne znam vise sta je ? :D
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: [C#]Sta su reference ???

Strane: 1 2

[ Pregleda: 12212 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.