C# interfacy a volani metody dedice – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# interfacy a volani metody dedice – .NET – Fórum – Programujte.comC# interfacy a volani metody dedice – .NET – Fórum – Programujte.com

 

redhead
~ Anonymní uživatel
3 příspěvky
14. 3. 2009   #1
-
0
-

Zdravim,
resim ted problem a nevim jak ho v C# vyresit, prechazim z C++ a nektere OOP pravidla jsou v C# dosti jine.
Co vim, tak nelze dedit vic nez jednu tridu, k tomu maji slouzit interfacy.
Resim neco takoveho:

class MyListener1 : IKeyListener
class MyListener2 : IKeyListener, IMouseListener
//samozrejme v classach definuju metody deklarovane v interfacech

class MyKeyDispatcher

{
IKeyListener listener;
public IKeyListener Listener
{
set {
listener = value //setuju objekty trid vyse
}
}

public void update()
{
listener.MetodaIKeyListeneru();
//toto neudela nic, protoze se nejspis vola metoda interfacu a ne listeneru typu MyListener1 nebo 2
//jak zavolat metodu definovanou az v "nejspodnejsim dedici" ??
}
}


diky
redhead

Nahlásit jako SPAM
IP: 85.207.47.–
dannyk0
Věrný člen
15. 3. 2009   #2
-
0
-

Interface zde funguji tak, ze kdyz z neho dedis, tak jak rikas, dana trida musi implementovat jeho metody atd.To mas ok, ale
ty ty interfacy pouzivas spatne, mely by se pouzit nejak takto:



class MojeTrida : IKeyListener {
//jeji definovane metody, ktere jsou v interface
}
class UseInteface {
void Pouzij (IKeyListener source) {
source.zpracuj();
}

Main() {
MojeTrida mt = new MojeTrida();
Pouzij(mt);
}
}

Tohle je zakladni pouziti interface.Ty prakticky volas pouze nejaky ukazatel, ktery nema co zpracovavat. Ty si musis proste predat nejakou tridu, ktera dedi z tohoto Interfacu a tim se ti zpristupni ty jeji metody na volani.
Jeste jedna moznost je:


IKeyListener listener = new MojeTrida();
listener.zpracuj();

Timto taky zavolas spravny kod.

Snad ti to pomuze.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
redhead
~ Anonymní uživatel
3 příspěvky
15. 3. 2009   #3
-
0
-

skvele, uz to jde! Diky

Jen otazka, kod se prakticky nezmenil, krome prepsani property IKeyListener EventCallback na metodu SetEventCallback(IKeyListener listener).
V tom je rozdil?? Delaji uplne to same, proste ulozi objekt do promene te zpracovavaci tridy..

Nahlásit jako SPAM
IP: 85.207.47.–
15. 3. 2009   #4
-
0
-

Pokud jsem tě správně pochopil, tak to mělo fungovat a musel jsi mít chybu někde jinde.

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

2 djanosik: Asi nedaval spravnou tridu do te property.

2 redhead: Prakticky je to to same, protoze porad tam musis vlozit nejakou tridu, ktera implementuje to IKeyListener rozhrani.

Jak sem potvrdil djanosikovi, tak ten puvodni kod by mel fungovat,ale zalezi, co vkladas do te property.
Prakticky bys mohl pouzit napr:



MyKeyDispatcher.Listener = new NejakaMojeTridaImplementujiciIKeyListener();

nebo

NejakaMojeTridaImplementujiciIKeyListener classa = new NejakaMojeTridaImplementujiciIKeyListener();
MyKeyDispatcher.Listener = classa;


Pak po zavolani MyKeyDispatcher.update(); by se ti mel provest kod dane prirazene tridy.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
redhead
~ Anonymní uživatel
3 příspěvky
15. 3. 2009   #6
-
0
-

ok, diky vsem
je mozny ze sem tam mel chybu, ale kod se prakticky opravdu nezmenil...

Nahlásit jako SPAM
IP: 85.207.47.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
16. 3. 2009   #7
-
0
-

Interface je funkčně ekvivalent čistě abstraktní třidy v C++.

Nahlásit jako SPAM
IP: 85.207.157.–
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, 33 hostů

Podobná vlákna

Volání metody ukazatelem — založil hlucheucho

Volání metody jiné třídy — založil Matěj_

Volání metody uvnitř vlákna — založil Dan3czek

Volani metody z jine tridy — založil Sunshinek

 

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