Még kezdo vagyok de ezek micsodak?
Írd le az Asd metódus fejlécét, amely kívülről elérhető, byte eredményű, és 3 egész szám típusú paramétere van:
- egy myval érték szerint átadott
- egy myresult kimeneti (vagy eredmény) szerint átadott
- egy myasd hivatkozás szerint átadot
#9: "#5 Miért, lehet referenciát másképp is átadni? Számomra érdekesen hangzana, hogy egy referenciát referencia szerint adunk át, a referenciára referálunk?"
C ben pl igen gyakori a mutatora mutato mutato :D
Na, hogy értsétek, miért kell a referencia (cím) szerinti paraméterátadás...
Az alapeset legyen az, hogy van egy változód és egy metódusod, aminek a változódat adod át paraméterként. A metódus megváltoztatja a paraméter értékét.
private void DoSomething(int X) {
.. X = 6;
}
int Value = 5;
Console.WriteLine("Metódus meghívása előtt: {0}", Value);
DoSomething(Value);
Console.WriteLine("Metódus meghívása után: {0}", Value);
A kimenet:
Metódus meghívása előtt: 5
Metódus meghívása után: 5
Ez azért történt, mert a Value értéke lemásolódott az X paraméter helyére. Így amikor az X-et módosítottad, nem a Value-t módosítottad, hanem a másolatot. Ezt hívjuk érték szerinti paraméterátadásnak.
A következő eset legyen az, hogy van egy változód és egy metódusod, aminek a változód referenciáját adod át paraméterként. A metódus megváltoztatja a paraméter értékét.
private void DoSomething(ref int X) {
.. X = 6;
}
int Value = 5;
Console.WriteLine("Metódus meghívása előtt: {0}", Value);
DoSomething(ref Value);
Console.WriteLine("Metódus meghívása után: {0}", Value);
A kimenet:
Metódus meghívása előtt: 5
Metódus meghívása után: 6
Ez azért történt, mert az X paraméter azt kapta meg, hogy a Value hol van a memóriában - azaz annak a címét. Mivel nem másolat készült annak az értékéről, hanem a memóriaterület lett megosztva, így maga a változó memóriaterülete, ezzel együtt annak értéke lett módosítva.
És hogy tisztázzuk azt is, hogy mi a helyzet referenciatípusok esetében:
private void DoSomething(StringBuilder sb) {
.. sb = new StringBuilder();
.. sb.AppendLine("Módosítva");
}
StringBuilder s = new StringBuilder();
s.AppendLine("Eredeti");
Console.WriteLine(s.ToString());
DoSomething(s);
Console.WriteLine(s.ToString());
A kimenet:
Eredeti
Eredeti
Nézzük meg cím szerinti paraméterátadással:
private void DoSomething(ref StringBuilder sb) {
.. sb = new StringBuilder();
.. sb.AppendLine("Módosítva");
}
StringBuilder s = new StringBuilder();
s.AppendLine("Eredeti");
Console.WriteLine(s.ToString());
DoSomething(ref s);
Console.WriteLine(s.ToString());
A kimenet:
Eredeti
Módosítva
A magyarázat ugyanaz, mint az előbb is volt.
Hát az szép..Bár eddig se voltak illúzióim a középiskolai programozás oktatásról.
Viszont így munkavállalásra szerintem nem vagy alkalmas. Hiába hoznád össze a tesztet valahogy(amire kicsi az esély), utána úgyis kiderülne, hogy nem vagy még olyan szinten.
Azt írtad pénteken lesz a teszt. Pár nap alatt nem lehet csodát tenni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!