Megosztás a következőn keresztül:


Eseménytervezés

Feljegyzés

Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms és Patterns for Reusable .NET Libraries, 2nd Edition engedélyével. Ezt a kiadást 2008-ban adták ki, és a könyvet azóta teljesen átdolgozták a harmadik kiadásban. Előfordulhat, hogy az oldalon található információk némelyike elavult.

Az események a visszahívások leggyakrabban használt formája (olyan szerkezetek, amelyek lehetővé teszik a keretrendszer számára a felhasználói kódba való meghívást). Más visszahívási mechanizmusok közé tartoznak a meghatalmazottakat szedő tagok, a virtuális tagok és a felületalapú beépülő modulok. A használhatósági tanulmányok adatai azt mutatják, hogy a fejlesztők többsége kényelmesebben használja az eseményeket, mint a többi visszahívási mechanizmust. Az események szépen integrálva vannak a Visual Studióval és számos nyelvvel.

Fontos megjegyezni, hogy az eseményeknek két csoportja van: a rendszerváltozások állapota előtt létrehozott események, az úgynevezett előesemények és az állapotváltozások után létrehozott események, úgynevezett utólagos események. Példa egy előeseményre Form.Closing, amely egy űrlap bezárása előtt jön létre. Példa egy esemény utáni eseményre Form.Closed, amely egy űrlap bezárása után jön létre.

✔️ NE használja a "raise" kifejezést az eseményekhez a "fire" vagy a "trigger" helyett.

✔️ NE használja System.EventHandler<TEventArgs> ahelyett, hogy manuálisan hoz létre új meghatalmazottakat, amelyeket eseménykezelőként szeretne használni.

✔️ VEGYE FIGYELEMBE, hogy egy alosztályt EventArgs használ az esemény argumentumaként, hacsak nem biztos abban, hogy az eseménynek soha nem kell adatokat szállítania az eseménykezelési módszerhez, ebben az esetben közvetlenül használhatja a EventArgs típust.

Ha egy API-t közvetlenül használ EventArgs , soha nem fog tudni adatokat hozzáadni az eseményhez kompatibilitástörő kompatibilitás nélkül. Ha alosztályt használ, még akkor is, ha kezdetben teljesen üres, szükség esetén tulajdonságokat adhat hozzá az alosztályhoz.

✔️ A DO egy védett virtuális metódust használ az egyes események létrehozásához. Ez csak az el nem zárt osztályok nem statikus eseményeire vonatkozik, a szerkezetekre, a lezárt osztályokra és a statikus eseményekre nem.

A módszer célja, hogy módot biztosítson egy származtatott osztály számára az esemény felülbírálással történő kezelésére. A felülírás rugalmasabb, gyorsabb és természetesebb módszer az alaposztály-események származtatott osztályokban való kezelésére. Konvenció szerint a metódus nevének a "Be" betűvel kell kezdődnie, és az esemény nevével kell követnie.

A származtatott osztály dönthet úgy, hogy nem hívja meg a metódus alap implementációját a felülbírálásban. Erre úgy készüljön fel, hogy nem foglalja bele az alaposztály megfelelő működéséhez szükséges feldolgozást a metódusba.

✔️ A DO vigyen egy paramétert a védett metódushoz, amely eseményt hoz létre.

A paramétert el kell nevezni e , és eseményargumentumosztályként kell beírni.

❌ NE adjon meg null értéket feladóként, amikor nem ismétlődő eseményt hoz létre.

✔️ A DO null értéket ad át feladóként statikus esemény létrehozásakor.

❌ NE adjon át null értéket eseményadat-paraméterként egy esemény létrehozásakor.

Ha nem szeretne adatokat átadni az eseménykezelési módszernek, akkor át kell adnia EventArgs.Empty az adatokat. A fejlesztők azt várják, hogy ez a paraméter ne legyen null értékű.

✔️ ÉRDEMES lehet olyan eseményeket emelni, amelyeket a végfelhasználó megszakíthat. Ez csak az előeseményekre vonatkozik.

Használja System.ComponentModel.CancelEventArgs vagy annak alosztályát eseményargumentumként, hogy a végfelhasználó megszakítsa az eseményeket.

Egyéni eseménykezelő tervezése

Vannak olyan esetek, amelyekben EventHandler<T> nem lehet használni, például amikor a keretrendszernek a CLR korábbi verzióival kell dolgoznia, amelyek nem támogatják a Genericst. Ilyen esetekben előfordulhat, hogy egyéni eseménykezelő delegáltat kell megterveznie és fejlesztenie.

✔️ A DO az eseménykezelők számára érvénytelen visszatérési típust használ.

Az eseménykezelők több eseménykezelési módszert is meghívhatnak, akár több objektumon is. Ha az eseménykezelési metódusok egy értéket adhatnak vissza, minden eseményhíváshoz több visszatérési érték is tartozhat.

✔️ HASZNÁLJA object az eseménykezelő első paraméterének típusaként, és hívja meg.sender

✔️ A DO az eseménykezelő második paraméterének típusaként használja System.EventArgs vagy annak alosztályát, és hívja meg.e

❌ NE legyen kétnál több paraméter az eseménykezelőknél.

© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.

Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published 22, 2008 by Addison-Wesley Professional, a Microsoft Windows Development Series részeként.

Lásd még