Diskuze: Události v UC
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
dej si tam breakpoint a podívej se co není instance objektu. Navíc si nejsem jistý jestli se události volají tak jako metody. Ve Visual Basicu je k tomu klíčové slovo RaiseEvent, v C# nevím.
Korektní kód pro události vypadá takhle:
private event EventHandler _handler;
public event EventHandler Handler
{
add { _handler += value; }
remove { _handler -= value; }
}
public void RaiseMyHandler()
{
if (_handler)
_handler(this, EventArgs.Empty);
}
Nefunguje
A nevím, co myslíš tím
if(_handler)
EventHandler přeci není bool
Vypadá to jako že objekt, uvnitř kterého se pracuje je null, ale to je blbost, ne? Ačkoliv tam nikde konstruktor nevidím.
Není, událost je taky objekt. Registruj si tam nějakou metodu a nebo dej prázdného delegáta.
Prostě si tu událost nezaregistruješ.
event je vždy null, pokud nebyla zaregistrována alespoň jedna metoda, proto
je nutné používat ten kód, který jsem uvedl výše.
Je nějak razantně špatně, když event občas initializuju jako event ...
= delegate {} ?
Špatně to není, ale vzhledem k tomu, že je lepší dávat inicializaci
instančních proměnných do konstruktoru, tak bych preferoval event += ...
Vyhneš se tak do budoucna promáznutí už zaregistrovaných handlerů.
Kontrola na null před vyvoláním události je navíc jistější ve chvíli,
kdy používáš recyklaci instancí.
ÁÁÁ, už mi to došlo, musel jsem si na to udělat extra projekt.
Zobrazeno 13 zpráv z 13.