Delen via


Gebeurtenisontwerp

Notitie

Deze inhoud wordt opnieuw afgedrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms en Patterns for Reusable .NET Libraries, 2nd Edition. Die editie werd in 2008 gepubliceerd en het boek is sindsdien volledig herzien in de derde editie. Sommige informatie op deze pagina is mogelijk verouderd.

Gebeurtenissen zijn de meest gebruikte vorm van callbacks (constructies waarmee het framework gebruikerscode kan aanroepen). Andere callbackmechanismen zijn leden die gemachtigden, virtuele leden en op interface gebaseerde invoegtoepassingen nemen. Gegevens uit bruikbaarheidsstudies geven aan dat de meeste ontwikkelaars vertrouwder zijn met het gebruik van gebeurtenissen dan ze de andere callback-mechanismen gebruiken. Gebeurtenissen zijn mooi geïntegreerd met Visual Studio en veel talen.

Het is belangrijk te weten dat er twee groepen gebeurtenissen zijn: gebeurtenissen die worden gegenereerd vóór een status van de systeemwijzigingen, pregebeurtenissen genoemd, en gebeurtenissen die worden gegenereerd na een statuswijzigingen, postgebeurtenissen genoemd. Een voorbeeld van een voorgebeurtenis zou zijn Form.Closing, die wordt gegenereerd voordat een formulier wordt gesloten. Een voorbeeld van een postgebeurtenis zou zijn Form.Closed, die wordt gegenereerd nadat een formulier is gesloten.

✔️ Gebruik de term 'verhogen' voor gebeurtenissen in plaats van 'fire' of 'trigger'.

✔️ Gebruik System.EventHandler<TEventArgs> in plaats van handmatig nieuwe gemachtigden te maken die moeten worden gebruikt als gebeurtenis-handlers.

✔️ OVERWEEG een subklasse van EventArgs als gebeurtenisargument te gebruiken, tenzij u er absoluut zeker van bent dat de gebeurtenis nooit gegevens naar de methode voor gebeurtenisafhandeling hoeft te dragen. In dat geval kunt u het EventArgs type rechtstreeks gebruiken.

Als u een API EventArgs rechtstreeks verzendt, kunt u nooit gegevens toevoegen die met de gebeurtenis moeten worden meegenomen zonder de compatibiliteit te verbreken. Als u een subklasse gebruikt, zelfs als deze in eerste instantie volledig leeg is, kunt u indien nodig eigenschappen toevoegen aan de subklasse.

✔️ Gebruik een beveiligde virtuele methode om elke gebeurtenis te genereren. Dit is alleen van toepassing op niet-statische gebeurtenissen op niet-verzegelde klassen, niet op structs, verzegelde klassen of statische gebeurtenissen.

Het doel van de methode is om een manier te bieden voor een afgeleide klasse voor het afhandelen van de gebeurtenis met behulp van een onderdrukking. Overschrijven is een flexibelere, snellere en natuurlijkere manier om basisklassegebeurtenissen in afgeleide klassen te verwerken. Volgens de conventie moet de naam van de methode beginnen met 'Aan' en worden gevolgd door de naam van de gebeurtenis.

De afgeleide klasse kan ervoor kiezen om de basisuitvoering van de methode niet aan te roepen in de onderdrukking. Wees hiervoor voorbereid door geen verwerking op te geven in de methode die vereist is om de basisklasse correct te laten werken.

✔️ Voer één parameter uit voor de beveiligde methode die een gebeurtenis genereert.

De parameter moet een naam e hebben en moet worden getypt als de gebeurtenisargumentklasse.

❌ GEEF NIET null door als de afzender bij het genereren van een niet-statische gebeurtenis.

✔️ GEEF null door als de afzender bij het genereren van een statische gebeurtenis.

❌ Geef null niet door als de parameter gebeurtenisgegevens bij het genereren van een gebeurtenis.

U moet doorgeven EventArgs.Empty als u geen gegevens wilt doorgeven aan de methode voor het afhandelen van gebeurtenissen. Ontwikkelaars verwachten dat deze parameter niet null is.

✔️ OVERWEEG gebeurtenissen te genereren die de eindgebruiker kan annuleren. Dit geldt alleen voor voorafgaande gebeurtenissen.

Gebruik System.ComponentModel.CancelEventArgs of de bijbehorende subklasse als gebeurtenisargument, zodat de eindgebruiker gebeurtenissen kan annuleren.

Ontwerp van aangepaste gebeurtenis-handler

Er zijn gevallen waarin EventHandler<T> niet kan worden gebruikt, bijvoorbeeld wanneer het framework moet werken met eerdere versies van de CLR, die geen ondersteuning biedt voor Generics. In dergelijke gevallen moet u mogelijk een gedelegeerde voor een aangepaste gebeurtenis-handler ontwerpen en ontwikkelen.

✔️ GEBRUIK WEL een retourtype ongeldigheid voor gebeurtenis-handlers.

Een gebeurtenis-handler kan meerdere methoden voor gebeurtenisafhandeling aanroepen, mogelijk op meerdere objecten. Als methoden voor gebeurtenisafhandeling een waarde zouden mogen retourneren, zouden er meerdere retourwaarden zijn voor elke aanroep van gebeurtenissen.

✔️ Gebruik object dit als het type van de eerste parameter van de gebeurtenis-handler en noem deze sender.

✔️ GEBRUIK System.EventArgs of de bijbehorende subklasse als het type van de tweede parameter van de gebeurtenis-handler en roep deze eaan.

❌ NIET meer dan twee parameters voor gebeurtenis-handlers hebben.

© Delen 2005, 2009 Microsoft Corporation. Alle rechten voorbehouden.

Herdrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published oct 22, 2008 by Addison-Wesley Professional als onderdeel van de Microsoft Windows Development Series.

Zie ook