Delen via


Basisklassen voor het implementeren van abstracties

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.

Strikt genomen wordt een klasse een basisklasse wanneer er een andere klasse uit wordt afgeleid. Voor dit gedeelte is een basisklasse echter een klasse die voornamelijk is ontworpen om een gemeenschappelijke abstractie te bieden of voor andere klassen om een bepaalde standaard implementatie te hergebruiken via overname. Basisklassen bevinden zich meestal in het midden van overnamehiërarchieën, tussen een abstractie in de hoofdmap van een hiërarchie en verschillende aangepaste implementaties onderaan.

Ze fungeren als implementatiehelpers voor het implementeren van abstracties. Een van de abstracties van het Framework voor geordende verzamelingen items is bijvoorbeeld de IList<T> interface. Implementeren IList<T> is niet triviaal en daarom biedt het Framework verschillende basisklassen, zoals Collection<T> en KeyedCollection<TKey,TItem>, die dienen als helpers voor het implementeren van aangepaste verzamelingen.

Basisklassen zijn meestal niet geschikt om zelf als abstracties te fungeren, omdat ze meestal te veel implementatie bevatten. De Collection<T> basisklasse bevat bijvoorbeeld veel implementaties met betrekking tot het feit dat de niet-generische IList interface wordt geïmplementeerd (om beter te integreren met niet-gegenereerde verzamelingen) en het feit dat het een verzameling items is die in het geheugen zijn opgeslagen in een van de velden.

Zoals eerder besproken, kunnen basisklassen waardevolle hulp bieden voor gebruikers die abstracties moeten implementeren, maar tegelijkertijd kunnen ze een aanzienlijke aansprakelijkheid zijn. Ze voegen oppervlakte toe en vergroten de diepte van overnamehiërarchieën en maken het framework dus conceptueel ingewikkeld. Daarom mogen basisklassen alleen worden gebruikt als ze een aanzienlijke waarde bieden aan de gebruikers van het framework. Ze moeten worden vermeden als ze alleen waarde bieden aan de implementeerfuncties van het framework. In dat geval moet delegering aan een interne implementatie in plaats van overname van een basisklasse sterk worden overwogen.

✔️ OVERWEEG basisklassen abstract te maken, zelfs als ze geen abstracte leden bevatten. Dit communiceert duidelijk met de gebruikers waaruit de klasse uitsluitend is ontworpen om van te worden overgenomen.

✔️ OVERWEEG basisklassen in een afzonderlijke naamruimte te plaatsen van de typen mainlinescenario's. Basisklassen zijn per definitie bedoeld voor geavanceerde uitbreidbaarheidsscenario's en zijn daarom niet interessant voor het merendeel van de gebruikers.

❌ VERMIJD het benoemen van basisklassen met een basisachtervoegsel als de klasse is bedoeld voor gebruik in openbare API's.

© 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