Kezdőoldal » Számítástechnika » Programozás » C#-ban mi a külömbség az...

C#-ban mi a külömbség az értéktípus, és a referencia között?

Figyelt kérdés

Mit változtat ha egyikkel,vagy másikkal adom meg egy áltozó értékét?Vagy a referencia nem ezt jelenti csak az értéktípusban lehet értéket adni?

köszi aki segít


2018. márc. 22. 20:52
1 2
 1/11 anonim ***** válasza:
88%

Az hogyha a fuggveny csinal valamit a valtozoval (modositja), akkor a valtozonak megmarad-e a korabbi erteke, vagy pedig modosul?

Referencia eseten nem marad meg az erteke. Ertektipuskor megmorzi az eredeti erteket (mert a fuggveny nem az igazi valtozot kapta meg csak egy masolatot).

2018. márc. 22. 20:59
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:
88%

Pelda:


void Method(ref int refArgument)

{

refArgument = refArgument + 44;

}


int number = 1;

Method(ref number);

Console.WriteLine(number); // 45-ot fog kiirni, de ha elhagyjuk a ref kulcsszot akkor meg 1-et ir ki

2018. márc. 22. 21:00
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:

Kösszönöm szépen,bár több sort nem értek még a progidból,az első kettőt sem,de most tanulgatom a nyelvet.Csak a könyvem egyáltalán nem tér ki semmiféle részletre sem.

Köszönöm a választ.ment a zöld pipa

2018. márc. 22. 21:12
 4/11 anonim ***** válasza:

A lényeg az, hogy az értéktípusok másolódnak:

int Eredeti = 5;

int Uj = a;

//Most az 5 kétszer szerepel a memóriában

Uj = 3;

Console.WriteLine(Eredeti); //Azt fogom látni, hogy 5 - mivel a másolatot módosítottam, nem az eredetit.


Ezzel szemben a referenciatípusok úgy viselkednek, hogy egyszer létrejönnek a memóriában, majd az az információ másolódik le, hogy hol található az érték a memóriában.

class Sample { int Value; }

Sample Eredeti = new Sample;

Eredeti.Value = 5;

Sample Uj = a;

//A Sample osztályunk példánya továbbra is csak egyszer szerepel a memóriában

Uj.Value = 3; //Mivel csak egyszer létezik, ennek hatása lesz az Eredeti-re is

Console.WriteLine(Eredeti); //Azt fogom látni, hogy 3, mivel az eredetit módosítottam.


A .NET az érték- és referenciatípusok tárolására két külön memóriaterületet használ. Az értéktípusok a stack-nek nevezett memóriaterületen tárolódnak, míg a referenciatípusok a heap-en. A kettő között az a különbség, hogy a stack esetében egy érték addig létezik, amíg a hatásköréből a program ki nem lép:

if (true) {

.. int valami = 5;

}

Az if vezérlési szerkezet legvégén a "valami" változóhoz rendelt érték azonnal felszabadul, mivel stack-en van tárolva.


if (true) {

.. object valami = new object();

}

Ebben az esetben a "new object()" utasítás hatására a heap-en létrejön egy System.Object példány, majd a stack-en ennek a memóriabeli címét tárolja a valami változóban. Bár a stack-en tárolt memóriacím azonnal megszűnik az if szerkezet végén, a heap-en tárolt System.Object példány még egy darabig a memóriában marad. Hogy ne neked kelljen foglalkozni a törlésével (merthogy amúgy a te dolgod lenne), egy Garbage Collectornak nevezett dolog időnként végignézi a heap-et és törli azokat az objektumokat, amire a stack-en nincs referencia.


C#-ban az érték- és a referenciatípus nagyon egyszerűen különböztethető meg:

- minden struct értéktípus (pl. System.Int32 azaz int, System.Double azaz double, ...)

- minden class referenciatípus

2018. márc. 23. 00:05
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:

Bár az utolsó válasz sem tiszta,igazából megértettem pár dolgot belőle. tehát tulajdonképpen arról van szó,hogy az egyiket addig hazsnálja a program,amig monduk egy osztáloyn belül van,míga másik végleges marad.bár lehet baromságot hordtam össze. azt még nem tudom,hogy a pont hogyan kerül oda,(Eredeti.value),és a value sem tudom mi,az ifet sem ismerem.No sebaj,mostantól úgyis elárasztom a kérdéseimmel a fórumot,mert jó lenne ezt a nyelvet megtanúlni, azt hallottam,hogy a referencia értéke is magas.


Mint a php,java,css,c++,visual basic

ilyesmiket mondtak,hogy lérdemes,meg persze a c# .

Utobbi mellett döntöttem.

2018. márc. 23. 01:21
 6/11 anonim ***** válasza:
Akkor szerintem ezzel a problémával ráérsz később foglalkozni. Tanuld egy kicsit az alapokat!
2018. márc. 23. 07:05
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:
#5 wtf
2018. márc. 23. 07:42
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:
Na, még egy troll...
2018. márc. 23. 08:06
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:
az ilyenek miért ülnek gép elé?
2018. márc. 23. 22:18
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:

Igyekszem az alapokat,csak ugye a könyv megy tovább,a magyarázatokat később ígéri,én meg szeretem tudni,mi történik az adott forrásban éppen.

üdv

2018. márc. 23. 22:24
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!