Delen via


Extensiemethoden

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.

Extensiemethoden zijn een taalfunctie waarmee statische methoden kunnen worden aangeroepen met behulp van de aanroepsyntaxis van de instantiemethode. Deze methoden moeten ten minste één parameter hebben, die het exemplaar vertegenwoordigt waarop de methode moet worden uitgevoerd.

De klasse die dergelijke uitbreidingsmethoden definieert, wordt aangeduid als de 'sponsorklasse' en moet worden gedeclareerd als statisch. Als u uitbreidingsmethoden wilt gebruiken, moet u de naamruimte importeren die de sponsorklasse definieert.

❌ VERMIJD frivole het definiëren van extensiemethoden, met name voor typen die u niet bezit.

Als u een eigen broncode van een type hebt, kunt u in plaats daarvan reguliere exemplaarmethoden gebruiken. Als u niet de eigenaar bent en u een methode wilt toevoegen, moet u heel voorzichtig zijn. Liberal use of extension methods has the potential of cluttering API's of types that were not designed to have these methods.

✔️ OVERWEEG om uitbreidingsmethoden te gebruiken in een van de volgende scenario's:

  • Als u helperfunctionaliteit wilt bieden die relevant is voor elke implementatie van een interface, kan deze functionaliteit worden geschreven in termen van de kerninterface. Dit komt doordat concrete implementaties anders niet aan interfaces kunnen worden toegewezen. De LINQ to Objects operators worden bijvoorbeeld geïmplementeerd als uitbreidingsmethoden voor alle IEnumerable<T> typen. Daarom wordt elke IEnumerable<> implementatie automatisch LINQ ingeschakeld.

  • Wanneer een exemplaarmethode een afhankelijkheid van een bepaald type zou introduceren, maar een dergelijke afhankelijkheid zou de regels voor afhankelijkheidsbeheer verbreken. Een afhankelijkheid van String naar System.Uri is bijvoorbeeld waarschijnlijk niet wenselijk en dus String.ToUri() zou de instantiemethode die wordt geretourneerd System.Uri , het verkeerde ontwerp zijn vanuit het perspectief van afhankelijkheidsbeheer. Een statische extensiemethode Uri.ToUri(this string str) die wordt geretourneerd System.Uri , is een veel beter ontwerp.

❌ VERMIJD het definiëren van extensiemethoden op System.Object.

VB-gebruikers kunnen dergelijke methoden niet aanroepen voor objectverwijzingen met behulp van de syntaxis van de extensiemethode. VB biedt geen ondersteuning voor het aanroepen van dergelijke methoden, omdat in VB het declareren van een verwijzing als Object alle methodeaanroepen ertoe dwingt om te laat gebonden te zijn (het werkelijke lid dat wordt aangeroepen tijdens runtime), terwijl bindingen met extensiemethoden worden bepaald op compileertijd (vroege gebonden).

Houd er rekening mee dat de richtlijn van toepassing is op andere talen waar hetzelfde bindingsgedrag aanwezig is of waarbij extensiemethoden niet worden ondersteund.

❌ Plaats extensiemethoden niet in dezelfde naamruimte als het uitgebreide type, tenzij het is bedoeld voor het toevoegen van methoden aan interfaces of voor afhankelijkheidsbeheer.

❌ VERMIJD het definiëren van twee of meer extensiemethoden met dezelfde handtekening, zelfs als ze zich in verschillende naamruimten bevinden.

✔️ OVERWEEG om extensiemethoden te definiëren in dezelfde naamruimte als het uitgebreide type als het type een interface is en of de extensiemethoden in de meeste of alle gevallen moeten worden gebruikt.

❌ DEFINIEER GEEN extensiemethoden voor het implementeren van een functie in naamruimten die normaal gesproken aan andere functies zijn gekoppeld. Definieer ze in plaats daarvan in de naamruimte die is gekoppeld aan de functie waartoe ze behoren.

❌ VERMIJD algemene naamgeving van naamruimten die zijn toegewezen aan extensiemethoden (bijvoorbeeld Extensies). Gebruik in plaats daarvan een beschrijvende naam (bijvoorbeeld 'Routering').

© 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