Algemene interfaces in .NET
Dit artikel bevat een overzicht van . De algemene interfaces van NET die algemene functionaliteit bieden voor verschillende algemene typen.
Algemene interfaces bieden typeveilige tegenhangers voor niet-genrische interfaces voor het rangschikken en gelijkheidsvergelijkingen, en voor functionaliteit die wordt gedeeld door algemene verzamelingstypen. .NET 7 introduceert algemene interfaces voor numerieke typen, bijvoorbeeld System.Numerics.INumber<TSelf>. Met deze interfaces kunt u algemene methoden definiëren die wiskundige functionaliteit bieden, waarbij de parameter voor het algemene type wordt beperkt tot een type waarmee een algemene, numerieke interface wordt geïmplementeerd.
Notitie
De typeparameters van verschillende algemene interfaces zijn gemarkeerd als covariant of contravariant, wat meer flexibiliteit biedt bij het toewijzen en gebruiken van typen die deze interfaces implementeren. Zie Covariantie en Contravariantie voor meer informatie.
Vergelijkingen van gelijkheid en ordenen
In de System naamruimte definiëren de System.IComparable<T> en System.IEquatable<T> algemene interfaces, zoals hun niet-generische tegenhangers, respectievelijk methoden voor het ordenen van vergelijkingen en gelijkheidsvergelijkingen. Typen implementeren deze interfaces om dergelijke vergelijkingen uit te voeren.
In de System.Collections.Generic naamruimte bieden de IComparer<T> en IEqualityComparer<T> algemene interfaces een manier om een volgorde- of gelijkheidsvergelijking te definiëren voor typen die de System.IComparable<T> of System.IEquatable<T> interface niet implementeren. Ze bieden ook een manier om deze relaties opnieuw te definiëren voor typen die dat doen.
Deze interfaces worden gebruikt door methoden en constructors van veel algemene verzamelingsklassen. U kunt bijvoorbeeld een algemeen IComparer<T> object doorgeven aan de constructor van de SortedDictionary<TKey,TValue> klasse om een sorteervolgorde op te geven voor een type dat geen algemeen System.IComparable<T>implementeert. Er zijn overbelastingen van de Array.Sort algemene statische methode en de instantiemethode voor het List<T>.Sort sorteren van matrices en lijsten met behulp van algemene IComparer<T> implementaties.
De Comparer<T> en EqualityComparer<T> algemene klassen bieden basisklassen voor implementaties van de IComparer<T> en IEqualityComparer<T> algemene interfaces en bieden ook standaardvolgorde- en gelijkheidsvergelijkingen via hun respectieve Comparer<T>.Default en EqualityComparer<T>.Default eigenschappen.
Verzamelingsfunctionaliteit
De ICollection<T> algemene interface is de basisinterface voor algemene verzamelingstypen. Het biedt basisfunctionaliteit voor het toevoegen, verwijderen, kopiëren en inventariseren van elementen. ICollection<T> neemt over van zowel algemene IEnumerable<T> als niet-genrische IEnumerable.
De IList<T> algemene interface breidt de ICollection<T> algemene interface uit met methoden voor geïndexeerd ophalen.
De IDictionary<TKey,TValue> algemene interface breidt de ICollection<T> algemene interface uit met methoden voor sleutel ophalen. Algemene woordenlijsttypen in de .NET-basisklassebibliotheek implementeren ook de niet-generische IDictionary interface.
De IEnumerable<T> algemene interface biedt een algemene enumeratorstructuur. De IEnumerator<T> algemene interface die wordt geïmplementeerd door algemene enumerators, neemt de niet-generische IEnumerator interface over; de MoveNext en Reset leden, die niet afhankelijk zijn van de typeparameter
T
, worden alleen weergegeven op de niet-generische interface. Dit betekent dat elke consument van de niet-generische interface ook de algemene interface kan gebruiken.
Wiskundige functionaliteit
.NET 7 introduceert algemene interfaces in de System.Numerics naamruimte waarin getalachtige typen worden beschreven en de functionaliteit die voor hen beschikbaar is. De 20 numerieke typen die de .NET-basisklassebibliotheek biedt, Int32Doublezijn bijvoorbeeld bijgewerkt om deze interfaces te implementeren. De meest prominente van deze interfaces is INumber<TSelf>, wat ongeveer overeenkomt met een 'reëel' getal.
Zie Algemene wiskunde voor meer informatie over deze interfaces.