Kezdőoldal » Számítástechnika » Programozás » C#-ban öröklésnél hogy kell...

C#-ban öröklésnél hogy kell típuskasztolni?

Figyelt kérdés
Egy tömböt akarok feltöltelni Film objektumokkal (manuálisan), de a tömbben lehetnek AkcióFilm objektumok is (a Film leszármazottja). Hogy van a kód a típuskasztoláshoz, ami ezt lehetővé teszi?

2017. márc. 29. 03:23
 1/3 anonim ***** válasza:
100%
Nem kell kasztolni semmit sehova, egyébként meg (Child)baseObj vagy az 'as' operátorral.
2017. márc. 29. 07:49
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
Ha a tömb Fim-et vár, akkor annak bármely leszármazottja jó, hiszen mindegyik rendelkezik azokkal a tulajdonságokkal, amikkel egy Film. Öröklődés, ennek nézz utána.
2017. márc. 29. 12:23
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:
88%

"Visszafelé" nem kell. Tehát ha van egy AkcióFilm objektumod, az egyben Film is.

Film f = new AkcióFilm();

Ez azért van, mert az AkcióFilm "tud minden olyan dolgot", amit a Film "tud".


Visszafelé ez azonban már nem biztos, hogy így van. Egy Film nem biztos, hogy "tud mindent", amit egy AkcióFilm "tud". És itt lesz lényeges két fogalom, a statikus típus és a dinamikus típus.


Röviden fogalmazva, a statikus típus azt jelenti, hogy milyen típusú például a változód/kifejezésed. A dinamikus típus pedig azt jelenti, hogy mi az az objektum valójában.

Film f = new AkcióFilm();

Jelen esetben az f statikus típusa Film, míg dinamikus típusa AkcióFilm.

Viszont ahhoz, hogy a dinamikus típussal kezdjünk valamit, lesz rögtön két operátorod és egy ún. típuskényszerítő (cast) kifejezésed.


A típuskényszerítés úgy néz ki, hogy a kifejezés elé megadod az új típust zárójelben:

Film f = new AkcióFilm();

AkcióFilm a = (AkcióFilm)f;


Ezzel annyi gond van, hogyha az f nem AkcióFilm (vagy annak egy leszármazottja), akkor ez kivételt fog dobni, amit ha nem kezelsz le, lehal az alkalmazásod.


A másik két operátor az "is" és az "as".

Az "is" így néz ki:

Film f = new AkcióFilm();

if (f is AkcióFilm) //true, ha f AkcióFilm, false ha nem


Az "as" operátor hasonló a típuskényszerítéshez, de nem fog kivételt dobni:

Film f = new AkcióFilm();

AkcióFilm a = f as AkcióFilm;

Ha az f nem AkcióFilm lenne, akkor az "a" értéke null lesz. Szóval nem is annyira muszáj is-zel megnézni, ha úgyis típuskényszeríteni akarod:


public void DoSomething() {

.. Film f = new AkcióFilm();

.. AkcióFilm a = f as AkcióFilm;


.. //A hibaellenőrzést elrejtheted, hogy átláthatóbb legyen a kódod

.. #region Error checking

.. if (a == null)

.. .. return; //Ilyen esetben ha nem tud a metódus tovább dolgozni, kiléphetsz belőle

.. #endregion


.. //csinálsz tovább mindent normálisan, tudván, hogy "a" nem null.

}

2017. márc. 29. 15:43
Hasznos számodra ez a válasz?

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!