Kezdőoldal » Számítástechnika » Programozás » C# ben hogyan lehetséges az,...

C# ben hogyan lehetséges az, hogy ha egy object típushoz ha hozzárendelek egy származtatottat akkor az object ből visszafejthető származtatott típusá?

Figyelt kérdés

Például.

object o = new Animal();

Animal a = (Animal)o;


Ez,azért lehetséges mert az object az alapból kontravariáns?

Az érthető számomra,hogy egy származtatott típus castolódik bázis típusra de egy bázis típusból mégis,hogyan lehet kinyerni egy származtatott típust ha egyszer nem tartalmazza azt?


2014. febr. 27. 21:28
1 2
 11/16 A kérdező kommentje:

int i = 10;

object o = i; //Ez azért jó mert i egy object is.

Ha igaz amit írsz akkor nincs castolás.

Egyszerűen akkor itt csak egy olyan memóriacím kerül bele az o mutatóba amin keresztül csak az object osztály adattagjait lehet elérni ugye?


Amikor pedig ezt írom: o.ToString()

Akkor hogy lehet az,hogy az int értékét vissza tudja adni?

Hisz a mutatón keresztül jelenleg csak az object osztály dolgait érhetjük el az intet pedig nem.


Ha a ToString virtuális metódus akkor érthető de nem az.

2014. febr. 28. 00:26
 12/16 anonim ***** válasza:

Itt megállt a tudományom, mert C#-hoz nem igazán értek, max Java-hoz

Ott ez nem egészen így megy, mert van autoboxing, meg miegymás, ha C-ban is így van, akkor ez a keresőszavad, ha meg nem, akkor majd megmondja valaki

2014. febr. 28. 00:30
Hasznos számodra ez a válasz?
 13/16 A kérdező kommentje:

hm megnéztem virtuális a tostring ez esetben értem már.

A vpt táblázatot azt jól ismerem és a működését is.

2014. febr. 28. 00:30
 14/16 A kérdező kommentje:

Átgondoltam a dolgokat.

Akkor ez így történik?:

Ezeknél a műveleteknél castolás(ollózás) nem történik.

A példában van egy 'o' mutatónk amihez hozzá lehet rendelni az Animal osztály adataira mutató memóriacímet.

De mivel a mutató típusa object ezért nem lássa az Animal részét.Ahhoz hogy újból láthassa az Animal részt explicit módon kell hozzárendelni egy Animal típushoz.

2014. febr. 28. 01:14
 15/16 anonim ***** válasza:

gyakorlatilag igen

tehát ollózás helyett úgymond "letakarás" történik, a mutató típusa csak azt mondja meg, hogyha a mutatót használjuk, akkor azon mondjuk milyen metódust hívhatsz, de ennyi

2014. febr. 28. 01:22
Hasznos számodra ez a válasz?
 16/16 anonim ***** válasza:

Az object típusú referencia mutathat bármilyen objektumra.

Szedd szét a fenti példát:


object o;

o = new Animal();


létrehoztál egy object típusú referenciát, amely egy Animal típusú objektumra mutat. Az o az Animal típusú objektumodat object típusú objektumként kezeli. Ettől még maga az adat a heapen valójában egy Animal objektum. Ha GetType-pal lekéred a típusát akkor (mivel az az adat típusát adja vissza) azt fogod látni, hogy az o egy Animalra mutat (tehát azt kapod eredményként, hogy YourClass.Animal).


Ez nem csak az object esetén van így, hanem minden származtatás esetén.

2014. febr. 28. 15:33
Hasznos számodra ez a válasz?
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!