C# pomocník pro pochopení kódu

gamer

Re:C# pomocnik pro pochopeni kodu - dotaz
« Odpověď #15 kdy: 10. 02. 2014, 11:36:40 »
Bude to pořád potomek, bude dělat věci jako potomek, i když se v kolekci tváří jako rodič. Když v potomkovi přepíšeš metodu a pak ji po vytažení z kolekce zavoláš, bude volat metodu potomka, ne rodiče.
Jen pokud je virtuální, jinak ne:
http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29.aspx
Takže se to nechová stejně jako potomek.


DK

Re:C# pomocnik pro pochopeni kodu - dotaz
« Odpověď #16 kdy: 10. 02. 2014, 11:43:33 »

ano, vrati to, co jsem do ni dal, jenze jelikoz do ni muzu dat pouze objekt typu te kolekce, tak se musi potomci pretypovat, tudiz nasledujici kod bude delat to, co je napsane v komentarich

Kód: [Vybrat]
List<Rodic> kolekce = new List<Rodic>();
kolekce.add(new Potomek()); // objekt se pretypuje na Rodic, do kolekce se ulozi typ Rodic, ne Potomek
kolekce[0]; // vrati typ Rodic

Bude to pořád potomek, bude dělat věci jako potomek, i když se v kolekci tváří jako rodič. Když v potomkovi přepíšeš metodu a pak ji po vytažení z kolekce zavoláš, bude volat metodu potomka, ne rodiče.
zalezi na situaci... nicmene nejde o to, jak se bude chovat, ale jakeho bude typu

tim, ze bude typu Rodic nemuzu zavolat metody, ktere ma pouze potomek... to stejne, kdyz se napriklad "pretypuje" na interface, ktery pouziva (taky budu moci zavolat pouze metody, ktere ma dane rozhrani)


tim se ale vzdalujeme od toho, co jsem mel na mysli -> a to, ze v kolekci budou mit vsechny objekty stejny typ, protoze je c# typovy jazyk -> neni mozne ulozit dva uplne rozdilne objekty do stejne kolekce bez pretypovani (ano, kdyz vytvorim List<object>, tak tam narvu vsechno mozne, ale ztratim puvodni typ a schopnosti, aniz by byla nutna dalsi konverze)

Novy

Re:C# pomocnik pro pochopeni kodu - dotaz
« Odpověď #17 kdy: 10. 02. 2014, 12:12:08 »

ano, vrati to, co jsem do ni dal, jenze jelikoz do ni muzu dat pouze objekt typu te kolekce, tak se musi potomci pretypovat, tudiz nasledujici kod bude delat to, co je napsane v komentarich

Kód: [Vybrat]
List<Rodic> kolekce = new List<Rodic>();
kolekce.add(new Potomek()); // objekt se pretypuje na Rodic, do kolekce se ulozi typ Rodic, ne Potomek
kolekce[0]; // vrati typ Rodic

Bude to pořád potomek, bude dělat věci jako potomek, i když se v kolekci tváří jako rodič. Když v potomkovi přepíšeš metodu a pak ji po vytažení z kolekce zavoláš, bude volat metodu potomka, ne rodiče.
zalezi na situaci... nicmene nejde o to, jak se bude chovat, ale jakeho bude typu

tim, ze bude typu Rodic nemuzu zavolat metody, ktere ma pouze potomek... to stejne, kdyz se napriklad "pretypuje" na interface, ktery pouziva (taky budu moci zavolat pouze metody, ktere ma dane rozhrani)


tim se ale vzdalujeme od toho, co jsem mel na mysli -> a to, ze v kolekci budou mit vsechny objekty stejny typ, protoze je c# typovy jazyk -> neni mozne ulozit dva uplne rozdilne objekty do stejne kolekce bez pretypovani (ano, kdyz vytvorim List<object>, tak tam narvu vsechno mozne, ale ztratim puvodni typ a schopnosti, aniz by byla nutna dalsi konverze)

Nikoliv stejný typ, ale stejné rozhraní, to je rozdíl. Pokud s tím máte problém, tak ty objekty nepatří to jednoho seznamu.

Re:C# pomocník pro pochopení kódu
« Odpověď #18 kdy: 10. 02. 2014, 22:01:55 »
Bud pretypuje na spolocneho predka:

Kód: [Vybrat]
new List<object>() { "text", 2 };
Alebo pouzije dynamic:

Kód: [Vybrat]
new List<dynamic>() { "text", 2 };
u dynamic sa typova informacia nestraca ale na druhej strane stracam typovu kontrolu.

kubbing

Re:C# pomocnik pro pochopeni kodu - dotaz
« Odpověď #19 kdy: 11. 02. 2014, 08:48:39 »
Kdo nedebugoval numerické výpočty v shaderech podle barvy pixelů je houby drsňák. 8)

juhu, jsem drsnak!