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
***************************
***
.:: TnT Ads - zanimljivi sajtovi ::. ***
***************************