Kezdőoldal » Számítástechnika » Programozás » C#, polimorfizmus. Több...

C#, polimorfizmus. Több helyen is olvastam róla, többször kipróbáltam és mégsem értem. A lenti kód alapján kérhetek segítséget?

Figyelt kérdés

Már többször is nekifutottam és több helyen is olvastam róla. Valahogy nem áll össze.


Tegnap este készítettem egy példát magamnak:

https://pastebin (pont) com/XRrBm8ci


Szerettem volna látni, melyik metódus hívódik meg, mi hogy működik. Részben TALÁN sikerült.


Base class típusú objektumot hozunk létre, ez praktikus lehet például akkor, ha tömböt vagy listát töltünk fel és előre nem tudjuk, hogy melyik objektum milyen típusú lesz. Viszont az inherited konstruktorait hívjuk meg, így voltaképp a példány maga az inherited class típusú lesz.

Ha a származtatott osztály felülírta a metódust, az övé hívódik meg, ha nem vagy nem is implementálta, akkor a base.

Ugye valami ilyesmi? :(


2019. júl. 2. 18:17
1 2
 1/17 anonim ***** válasza:
Igen, valami ilyesmi.
2019. júl. 2. 18:25
Hasznos számodra ez a válasz?
 2/17 anonim ***** válasza:

Nagyjából ennyi a lényeg:

class Base {

public virtual void Print() => Console.WriteLine("From base");

}


class Derived : Base {

public override void Print() => Console.WriteLine("From derived");

}


Base x = new Derived();

x.Print(); //From derived


Ha nem virtual a metódus:

class Base {

public void Print() => Console.WriteLine("From base");

}


class Derived : Base {

public new void Print() => Console.WriteLine("From derived");

}


Base x = new Derived();

x.Print(); //From base


Vagyis, ha override-olsz, mindig a leszármazott osztály metódusa hívódik meg. Ha nem, akkor az ősosztályé - mert nem felülírod, hanem csak elrejted az ősosztály implementációját.

2019. júl. 2. 22:16
Hasznos számodra ez a válasz?
 3/17 A kérdező kommentje:
Na, itt szoktam elveszteni a fonalat. :(
2019. júl. 3. 05:10
 4/17 anonim ***** válasza:
Hol? Senki nem írt semmi újat.
2019. júl. 3. 09:05
Hasznos számodra ez a válasz?
 5/17 A kérdező kommentje:

"Ha nem (overrdeolsz), akkor az ősosztályé - mert nem felülírod, hanem csak elrejted az ősosztály implementációját."



Aanyaaaaa miiiijjééééért és amúgy hol használatos ez az egész?

2019. júl. 3. 09:10
 6/17 anonim ***** válasza:

Mondok egy valós példát. Képzeld el hogy csinálsz valami autóversenyes játékot. Amikor kialszanak a lámpák, minden autót elkell indítani a rajt helyéről. Akkor nem meghívogatjuk minden autón a Start() metódust, hanem ezt csináljuk.


public class Car

{

public virtual Start();

}


public class Ferrari : Car

{

public override Start()

{

Console.WriteLine("A ferrari elindult");

}

}


public class McLaren: Car

{

public override Start()

{

Console.WriteLine("A McLaren elindult");

}

}



var list = new List<Car>();

list.Add(new Ferrari);

list.Add(new McLaren);


foreach car in list

{

car.Start(); //És itt nem az ősoszály Start metódusa fog meghívodni, amit nem is implementáltam, mert fölösleges, hanem a leszármazottaké. Tehát a program elfogja indítani a Mclaren-t meg a Ferrarit is, anélkül hogy HÁRDKÓDOLNI kellet volna hogy ferrari.Start(); McLaren.Start();

}

2019. júl. 3. 09:28
Hasznos számodra ez a válasz?
 7/17 anonim ***** válasza:
Ja egyébként polimorfizmust interface-ekkel, abstract osztályokkal is ellehet érni.
2019. júl. 3. 09:29
Hasznos számodra ez a válasz?
 8/17 A kérdező kommentje:
Az én agykapacitásomnak ezt kb csak bemagolni lehet.
2019. júl. 3. 09:40
 9/17 A kérdező kommentje:
Nekem pont abstract osztállyal sikerült, csak nem értem.
2019. júl. 3. 09:41
 10/17 anonim ***** válasza:
Nem az agykapacitásoddal van a baj, hanem nem érted azokat a dolgokat sem, amiket kéne érteni ahhoz hogy megértsed ezt. Azt javaslom kezd el újra ismételni a tanultakat, és mélyítsd el jobban.
2019. júl. 3. 10:35
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!