Zdar, učím se podle knihy Microsoft Visual C# 2008 Krok za krokem.
Narazil jsem na abstraktní metody a rozhraní a pravděpodobně mi uniká jejich smysl. V podstatě jenom rezervují místo pro metody/hodnotové typy definované v abstraktní třídě/rozhraní po kterém dědí daná třída. Také zajišťují že v dané třídě metody/hodnotové typy budou muset být. Ale k čemu to je pokud tuto aplikaci nebude nikdo rozšiřovat? Nebo to je právě jediný smysl?
A ještě, když vytvořím rodičovskou(0) třídu obsahující virtual metodu(bla), v potomkovy(01) jí override-nu a zapečetím(bla), tak když udělám potomka(02) od prvního potomka (01) tak již (bla v 02) nepůjde znova override-nu? Jinak by to šlo?
PS: Omlouvám se za stupidní dotazy.
PS2: Děkuji za odpověď.
OFF: V mozzile když přidám nové téma tak se nepřidá a přesměruje mě to na jedno podtéma o šachovnici. V IE zas nefunguje "editovat" příspěvek to mě hodilo na "zaslat nový příspěvek"
Fórum › .NET
C# Abstakrní metody & rozhraní
Abstraktní třída se používá opravdu v případě, že potřebuješ společné rozhraní/vlastnosti. Instanci takové třídy nelze vytvořit nebo-li další vlastnost, kterou to sebou nese, je ta, že nutíš "uživatele" této třídy vytvořit - zdědit vlastní a v ní všechno naimplementovat.
Představ si, že děláš aplikaci, kde se pracuje s auty. Vytvoříš si abstraktní třídu auto, která bude definovat společné rozhraní všem autům. Následně budeš dělat dceřiné třídy, kde budeš jednotlivé odlišnosti implementovat pro každý typ auta zvlášť. Když pak budeš pracovat s jakýmkoliv autem, tak máš společné rozhraní a můžeš naplno využívat polymorfismus. Neboli se abstraktní třída využije i v rámci jedné aplikace.
Když zapečetíš metodu, tak v (další) dceřiné třídě ji nelze přetížit. Kdyby nebyla zapečetěná, tak by to samozřejmě šlo.
Abstraktní třídy už chápu, ty mají smysl, když je budu dál deďit s tím že se přímo jejich instance nebude vytvářet. Spíš nechápu smysl rozhraní. Tam vidím jediný důvod v tom že "nutí" programátora danou metodu implementovat. Vždyď pokud dobře vím nemohou nést žádný kód. Další a jediný význam mě napadá v další přehlednosti kodu, jinak nic.
Pokud mi něco uniká, budu rád když mi poradíte.
To Petrroll : Myslím, že jsi řekl jejich nejpodstatnější výhodu, důvod jejich existence. V své podstatě umožňují komunikovat s třídami, o kterých ty třeba vůbec nic nevíš (cizí třídy např. v případě plug-inů), apod. Užitečných využití se najde hromada.
Hlavní finta rozhraní je ta, že ho mohou implementovat třídy, které spolu logicky vůbec nesouvisí, tj. nemají společného předka (s výjimkou "prapředka" System.Object). Pěkný příklad je třeba cyklus foreach - ten prochází po jednotlivých položkách cokoliv, co implementuje rozhraní IEnumerable a je mu úplně ukradený jestli se jedná o pole, List nebo tvojí vlastní třídu implementující zmíněné rozhraní. Navíc rozhraní můžeš implementovat nekonečně, dědit jen z jediného předka.
Podstatné je, že teorii se pochopil a až praxí získáš cit proto, kdy použít dědění a kdy implementování interface.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Abstraktní metody a rozhrání — založil ViliX64
AJAX & PHP & MySQL vložení záznamu — založil JMM
BASCOM : data(1), &HFF snížit o jednu jednotku dolů na data(1),… — založil grantorino
Guild Wars & Star Wars Galaxies & MMORPG — založil Marecek
Moderátoři diskuze