Dedenie z interfacu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dedenie z interfacu – .NET – Fórum – Programujte.comDedenie z interfacu – .NET – Fórum – Programujte.com

 

mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #1
-
0
-

Zdravim, mam Interface a 2 triedy, ktore dedia z interfacu. Tie triedy maju clenov, metody... zdedenych od interfacu + vlastne (public). Ide mi o to aby v inych triedach (napr GUI) som nemusel castnut na tu potrebnu triedu, ktoru prave potrebujem. Poradte mi ak to robim zle. Dik

Nahlásit jako SPAM
IP: 78.98.6.–
5. 8. 2008   #2
-
0
-

To mnn : Není mi jasné, co vlastně chceš. Zkus to lépe formulovat.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mephi0
Expert
5. 8. 2008   #3
-
0
-

ak to chápem dobre chceš pristupovať k verejným členom interface-u nejakej instance triedy, ktora od neho dedi, bez toho, aby si ju explicitne pretypoval ? No ale načo by si ju mal pretypovavať ? ibažeby si ju definoval ako ten interface a na pristup by ti stačilo napisať "Objekt.PremennaInterfaceu". Takže uveď priklad alebo to trochu lepšie opiš.

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #4
-
0
-



interface IRozhranie
{
void MetodaA
}
class TriedaA : IRozhranie
{
void MetodaA()
{
//nejaky kod
}

void MetodaC()
{
//nejaky kod
}
}

class TriedaB : IRozhranie
{
void MetodaA()
{
//nejaky kod
}

void MetodaB()
{
//nejaky kod
}
}


Ked zavolam MetodaA tak je to v pohode. Ale ked chcem zavolat MetodaB alebo MetodaC tak musim pretypovat na pozadovanu triedu. Nedalo by sa nejako lepsie toto vyriesit?

Nahlásit jako SPAM
IP: 78.98.6.–
bukaj0
Věrný člen
5. 8. 2008   #5
-
0
-

mnn
Interfaces jsou právě od toho, abys přetypovávat nemusel. Definují nějaký obor metod, které třídy, které daný interface implementují, budou podporovat. Pokud potřebuješ metodě předávat argument, který bude instancí nějakého interface a potřebuješ na něm volat určitou metodu, přidej ji do interface. Tohle, oč se nažíš pěkně „smrdí“ :o) Doporučuji jiný návrh aplikace, pokud to „prostě nemůžeš udělat jinak“.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
5. 8. 2008   #6
-
0
-

To mnn : Nelze. Pokud chceš volat metody, které nejsou definované na úrovni rozhraní, tak to prostě musíš přetypovat.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #7
-
0
-

bukaj: OK, cize ak v interfaci dam tie metody (cize A,B,C) a triedaB nebude podporovat metoduC tak vyhodim exception NotSupportedException a zachytavat v try..catch? Lebo ako pozeram tak napr vo WinForms to takto je. Dalsia rezia na zachytenie vynimky a osetrenie…

Nahlásit jako SPAM
IP: 78.98.6.–
bukaj0
Věrný člen
5. 8. 2008   #8
-
0
-

mnn
OK, cize ak v interfaci dam tie metody (cize A,B,C) a triedaB nebude podporovat metoduC tak vyhodim exception NotSupportedException a zachytavat v try..catch?
Ne, v tom případě je to napsané pěkně blbě. Pokud posíláš do metody instance různých tříd díky tomu, že implementují stejné rozhraní, měl bych na instaníchích používat pouze metody imeplementované v rozhraní. Jestli jejich metody voláš podle toho, jak na co se ti to podaří přetypovat, pak píšeš pěkně humusácky :o) Což takhle přetížené metody, hm?

Lebo ako pozeram tak napr vo WinForms to takto je.
Pokud s nimi musíš dělat a je to tam takhle, tak tě lituji.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
5. 8. 2008   #9
-
0
-

To bukaj : Ne, není to tam tak. ;) Občas ale nastane situace, kdy je třeba implementovat nějaké rozhraní a není žádoucí, aby byla některá z definovaných metod podporována.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #10
-
0
-

bukaj: Tu ide o to ze cast kodu ktora pouziva instancie tych tried, pouziva len metody definovane v Interfaci (cize tomu kodu je jedno ci sa za tym skryva A alebo B trieda). Zvysok kodu musi vediet ci sa jedna o trieduA alebo trieduB.

Nahlásit jako SPAM
IP: 78.98.6.–
bukaj0
Věrný člen
5. 8. 2008   #11
-
0
-

mnn
Tu ide o to ze cast kodu ktora pouziva instancie tych tried, pouziva len metody definovane v Interfaci (cize tomu kodu je jedno ci sa za tym skryva A alebo B trieda). Zvysok kodu musi vediet ci sa jedna o trieduA alebo trieduB.
To je tak těžké kód, kterému „je to jedno“, oddělit od třídně specifického zbytku? :o)

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
5. 8. 2008   #12
-
0
-

Když už to musí být, tak to přece můžeš řešit takhle:

private IRozhranie test = new TriedaA();


test.MetodaA();
if(test is TriedaA)
{
(test as TriedaA).MetodaC();
}
else if(test is TriedaB)
{
(test as TriedaB).MetodaB();
}

Ale osobně si myslím, že by se to mohlo řešit elegantněji.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #13
-
0
-

djanosik: Dik za radu, ale prave tomuto som sa chcel vyhnut. Ako by sa to dalo vyriesit "elegantneji"?

Nahlásit jako SPAM
IP: 78.98.6.–
5. 8. 2008   #14
-
0
-

To mnn : Přímá náhrada za toto řešení v podstatě není. Elegantněji by se mohl vyřešit až konkrétní případ (resp. mohlo by se najít úplně jiné řešení), v teoretické rovině to není možné.

Editoval djanosik: A tak jsem to taky ve svém předchozím příspěvku myslel.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #15
-
0
-

djanosik: cize mam to chapat ze mi nechces poradit?

Nahlásit jako SPAM
IP: 78.98.6.–
5. 8. 2008   #16
-
0
-

To mnn : Ne a zdrž se prosím takových příspěvků, nikam to nevede. Nemám ti víc jak poradit.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #17
-
0
-

djanosik napsal:
To mnn : Ne



Ooooh, a ja hlupak som si myslel ze forum tu je od toho aby sa tu radilo a nie aby sa tu ignorovali problemy… lol

Nahlásit jako SPAM
IP: 78.98.6.–
5. 8. 2008   #18
-
0
-

To mnn : To řikáš ty. Já to napsal jako odpověď na otázku a ne jako že ti nechci poradit. Asi to budu muset nějak rozseknout.

BTW: Forum je od toho, aby se člověk mohl zeptat na řešení problémů, které není schopen sám objevit. Nikoliv od toho, aby tady každej druhej sobecky mrhal časem ostatních lidí. Ještě chvíli pokračuj a začnu se tím opravdu zabývat.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
bukaj0
Věrný člen
5. 8. 2008   #19
-
0
-

mnn
Ooooh, a ja hlupak som si myslel ze forum tu je od toho aby sa tu radilo a nie aby sa tu ignorovali problemy… lol
Jestli hledáš bandu blbců, co to napíšou za tebe, jsi tady špatně ;o)

Tvůj hlavní problém je v tom, že celý návrh je blbě. Chceš řešení? Celé to zahoď a udělej znovu.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
mnn
~ Anonymní uživatel
118 příspěvků
5. 8. 2008   #20
-
0
-

bukaj: ukaz presne kde som pytal nejaky kod! len som sa pytal ako by ste to vy riesili. No vidim ze tu sa clovek nedopracuje chleba…

Nahlásit jako SPAM
IP: 78.98.6.–
5. 8. 2008   #21
-
0
-

To mnn : Už jsem ti snad řekl, že to nelze řešit v teoretické rovině (je to stejné jako přemýšlet nad tím, jak dostat obsah ze zavřené krabice když ani netušíme co je uvnitř). Je třeba konkrétní případ. Tento thread je dále bezpředmětný. Locked.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Dedenie — založil vit

Dedenie a vlakna — založil vreckovka

C++ dedenie triedy — založil Marbulinek

Dedenie vlastnej class — založil bozole_sk

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý