Diskuze: C# události
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Používají se dost, ale základy bys měl zvládat i bez toho, že bys události chápal. Pokud ti můžu poradit, běž dál a vrať se k nim až když je budeš aspoň měsíc používat (tj. budeš si vědom, jak a kde se používají), pak by to pro tebe neměl být problém.
Každé ťuknutí na čudlík, pohyb oknem apod. je událost. Takže se používají VELMI hojně. Ale tobě jde spíše o uživatelsky definované události, že. Princip je tento: Obsluha události je funkce, která se má vykonat, když událost nastane. Odkaz na tuhle funkci musíš nějak dostat tam, kde se má událost obsloužit. To se dá dělat různě, nejobvyklejší je to přes delegáta. Nevím, jestli víš, o co se jedná, pokud ne, představ si to jako pointer na funkci. Tu funkci, která zajišťuje obsluhu události. Samotná událost může být v podstatě cokoli tě napadne, třeba ztráta spojení s databází, nějaká nečekaná situace při zpracování dat, smrt postavy ve hře,apod. Základní syntaxe je tato:
public delegate void delegOnSmrt(object sender); ---> tím deklaruješ schéma funkce, která bude tvořit obsluhu události. Konkrétní obsluha bude za chvíli.
class Postava ---> to bude objekt, u kterého budeme vyvolávat událost(i)
{
public event delegOnSmrt OnSmrt; ---> tímhle řekneš třídě, že bude mít k dispozici funkci OnSmrt a bude mít schéma delegOnSmrt, tj. bude vyžadovat při volání jako parametr nějaký object.
.....
if (Zdravi == 0)
{
if (OnSmrt != null) ---> je třeba se ujistit, že ta funkce je skutečně k dispozici
OnSmrt(this) ---> a v tom případě ji zavoláme a jako parametr předáme něco typu object, typicky pointer na u třídu, která událost vyvolala. Velmi užitečné, viz za chvíli.
}
......
No a v hlavním programu, který zajišťuje celou logiku, by se mělo objevit toto:
drak = new Postava();
drak.OnSmrt += ObsluhaSmrtiPostavy; tím řekneme, že v případě události OnSmrt objektu drak se má provést funkce "ObsluhaSmrtiPostavy"
....
Honza = new Postava();
Honza.OnSmrt += ObsluhaSmrtiPostavy; tím řekneme, že v případě události OnSmrt objektu Honza se má provést tatáž funkce "ObsluhaSmrtiPostavy"
....
V obou případech se volá tatáž funkce ObsluhaSmrtiPostavy, takže v zásadě nelze rozlišit, která postava to vlastně špatně dopadla. Proto je tu parametr sender, ve kterém je zapsáno, kdo tu událost vyvolal a lze tak událost korektně obsloužit.
void ObsluhaSmrtiPostavy(object sender) ---> a tohle je ta funkce, která se má vykonat
{
if (sender == drak)
{
(drak prohrál) takže tady naprogramujeme oslavnou fanfáru
}
if (sender == Honza)
{
(Honza prohrál) a tady naprogramujeme, co se má stát, když drak vyhraje
}
}
Teď je otázka, proč to dělat takhle. Velmi podobně je napsaný i .NET framework, například u třídy Button je napsáno, že vyvolává událost OnClick, ale samotná obsluha (tj. co se má stát po kliknutí) se už píše v tvém programu. Vše ostatní (optický efekt apod.) je napsané ve střevech .NET frameworku, na programátorovi zbyde jen obsluha.
Moc děkuji za vysvětlení. Konečně sem ty události pochopil
vysvětlil jste mi to lépe než
tutorial co je zde na webu.
Moc díky! 
Edit:
jinak delegáty chápu.
Zobrazeno 4 zpráv z 4.
