Esemény küldött és mi a különbség verem túlcsordulás az orosz
Kezdjük azzal, hogy az esemény résztvevői - ez két különböző dolog, csak más, mint az autó, és a sárgarépát. A különbség a pályáról -delegatom event'om körülbelül ugyanaz, mint a terep és tulajdonság: ha néha úgy néz ki, mint delegatnoe területen. Lássuk ezt.
átruházhatja - ebben az osztályban. amely a „sablon” módszer, azaz a módszer aláírásával. Változó delegatnogo típusa - objektum típus MulticastDelegate (pontosabban, ennek származéka), amely tartalmazhat egy vagy több tárgy, amelyek kompatibilisek a módszerek „sablon” aláírás (bites számláló és kovariancia bonyolítja a képet). Azaz, ez olyan, mint egy változó, amely tartalmazhat funkciókat. Mert ezek a változók meghatározása működés +. amely ötvözi a feltételek egy új funkciót, és szimmetrikus művelet -. Ezeket a műveleteket automatikusan generálja származékok és a művelet + = - =.
Az esemény - ez csak néhány módszer az osztályban kijelölt hozzáadása és eltávolítása. és amelynek tetszőleges szemantikája által kiválasztott a programozó. (Összehasonlítás -. A getter és setter tulajdonságok) A alapértelmezett megvalósítása Juke kezdődik delegatnogo rejtett mező típusát, és a hozzáadni / eltávolítani a hozzáadott vagy eltávolítjuk módszerek (alatt lock'om). (Ahhoz, hogy megzavarja a kép egy kicsit, ez egy rejtett mező áll rendelkezésre a neve megegyezik az esemény.) A funkciók hozzáadása / eltávolítása. összetevői esemény. hivatkoztak -kal, és hogyan + = - =. Nincs működés + / -. Természetesen, nem.
Nézzük is megy át a különbség a Juke-osztály terén az állami delegatnogo típusát.
Vegyük azt az esetet, amikor az esemény végre „alapértelmezés”, azaz implicit delegatnym területen. A különbség abban rejlik, hogy:
1) delegatnogo területén van teljes hozzáférése. Akkor - még az órákon kívül! - MulticastDelegate szétszerelt alkatrészek és gyűjteni az új, akkor cserélje ki a saját, vagy rendelni egy null. nevezhetjük, akkor bemásolja magát a változót. Akkor teljes hozzáférést, valamint a nyilvános területen. (Ez persze nyilvánvalóan sérti tokozást.)
Mert Juke, akkor csak írni instance.Event + = felvezető és instance.Event - = kezelő. hogy megjelenik a hozzáadás és eltávolítás. ami viszont ismét nem hívja a + = és - = automatikusan végrehajtott küldöttet. Nincs más hozzáférési nincs. Az osztályban, akkor viszont kap olvasni értékét a küldött nevének felhasználásával a Juke. (Erre azért van szükség, például annak érdekében, hogy hívja a képviseletet VB szemben a C # egy speciális módszerrel RaiseEvent a szükséges ellenőrzéseket.)
Abban az esetben, ha az esemény nem következik be „alapértelmezés”, akkor gyakorlatilag semmi közös. hozzáadása és eltávolítása módszerek semmit:
A programozó teheti magát a küldött és az „add” az aláírt rakodók, de ez elvileg a goodwill. Másrészt, azt javasoljuk, hogy ne szakadjon a várt szemantikai osztály ügyfelek, és használja az eseményt szánták.
* A modern változatai C #, hogy hívja a thread-safe ajánlott MyEvent minta? .Invoke (.). Azonban a szálak biztonságos abban az esetben nem fog simán, mint azt a cikk [2].