Interfaceontwerp
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.
Hoewel de meeste API's het beste zijn gemodelleerd met behulp van klassen en structs, zijn er gevallen waarin interfaces meer geschikt zijn of de enige optie zijn.
De CLR biedt geen ondersteuning voor meerdere overnames (bijvoorbeeld CLR-klassen kunnen niet overnemen van meer dan één basisklasse), maar hiermee kunnen typen een of meer interfaces implementeren naast het overnemen van een basisklasse. Daarom worden interfaces vaak gebruikt om het effect van meerdere overnames te bereiken. Is bijvoorbeeld IDisposable een interface waarmee typen disposabiliteit kunnen ondersteunen, onafhankelijk van andere overnamehiërarchieën waarin ze willen deelnemen.
De andere situatie waarin het definiëren van een interface geschikt is, is het maken van een gemeenschappelijke interface die kan worden ondersteund door verschillende typen, waaronder sommige waardetypen. Waardetypen kunnen niet worden overgenomen van andere typen dan ValueType, maar ze kunnen interfaces implementeren, dus het gebruik van een interface is de enige optie om een gemeenschappelijk basistype te bieden.
✔️ Definieer een interface als u een algemene API nodig hebt om te worden ondersteund door een set typen die waardetypen bevatten.
✔️ OVERWEEG een interface te definiëren als u de functionaliteit ervan wilt ondersteunen voor typen die al van een ander type overnemen.
❌ VERMIJD het gebruik van markeringsinterfaces (interfaces zonder leden).
Als u een klasse als een specifieke eigenschap (markering) wilt markeren, gebruikt u in het algemeen een aangepast kenmerk in plaats van een interface.
✔️ DO biedt ten minste één type dat een implementatie van een interface is.
Dit helpt bij het valideren van het ontwerp van de interface. Is bijvoorbeeld List<T> een implementatie van de IList<T> interface.
✔️ GEEF ten minste één API op die elke interface gebruikt die u definieert (een methode waarbij de interface als parameter wordt gebruikt of een eigenschap die is getypt als de interface).
Dit helpt bij het valideren van het interfaceontwerp. Verbruikt bijvoorbeeld List<T>.Sort de System.Collections.Generic.IComparer<T> interface.
❌ VOEG GEEN leden toe aan een interface die eerder is verzonden.
Als u dit doet, worden implementaties van de interface verbroken. U moet een nieuwe interface maken om versiebeheerproblemen te voorkomen.
Behalve de situaties die in deze richtlijnen worden beschreven, moet u in het algemeen klassen kiezen in plaats van interfaces bij het ontwerpen van herbruikbare bibliotheken voor beheerde code.
© 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.