IArgumentProvider Interface

Definitie

Biedt een interne interface voor toegang tot de argumenten van meerdere structuurknooppunten (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression en IndexExpression). Deze API is alleen bedoeld voor intern gebruik.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Afgeleid

Opmerkingen

U moet deze API niet gebruiken. Het is alleen openbaar vanwege het herstructureren van assembly's en bestaat alleen voor interne prestatieoptimalisaties. Het maakt twee optimalisaties mogelijk die de grootte van de bomen verminderen:

  1. Hiermee kunnen de knooppunten een IList<T> in plaats van een ReadOnlyCollection<T>. Dit bespaart de kosten voor het toewijzen van de alleen-lezen verzameling voor elk knooppunt.

  2. Hiermee kunnen gespecialiseerde subklassen worden gemaakt die een specifiek aantal argumenten bevatten (bijvoorbeeld Block2, Block2). Block4 Daarom hoeven deze knooppunten niet zowel een als ReadOnlyCollection<T> een matrix toe te wijzen voor het opslaan van hun elementen, waardoor 32 bytes per knooppunt worden opgeslagen. Deze techniek wordt gebruikt door verschillende knooppunten, waaronder BlockExpression, InvocationExpressionen MethodCallExpression.

De knooppunten van de expressiestructuur blijven de oorspronkelijke LINQ-eigenschappen van ReadOnlyCollection<T> objecten beschikbaar maken. Ze doen dit door een veld opnieuw te gebruiken voor het opslaan van zowel de matrix als een element dat normaal gesproken in de matrix wordt opgeslagen.

Voor de matrixcase wordt de verzameling getypt IList<T> in plaats van ReadOnlyCollection<T>. Wanneer het knooppunt in eerste instantie is samengesteld, is het een matrix. De compiler of hulpprogramma's in deze bibliotheek hebben toegang tot de elementen via deze interface. Het openen van matrixelementen bevordert de matrix tot een ReadOnlyCollection<T>.

Voor de objectcase wordt het eerste argument opgeslagen in een veld dat is getypt naar Object. Wanneer het knooppunt in eerste instantie is samengesteld, bevat dit veld het Expression eerste argument. Wanneer de compiler en hulpprogramma's in deze bibliotheek toegang hebben tot de argumenten, gebruiken ze deze interface opnieuw en gebruikt de accessor voor het eerste argument de interne Expression.ReturnObject<T>(System.Object) helpermethode om het object te retourneren dat de Expression aanvraag ReadOnlyCollection<T> verwerkt. Wanneer de gebruiker het ReadOnlyCollection<T>objectveld opent, wordt het objectveld bijgewerkt zodat het rechtstreeks op de ReadOnlyCollection<T>.

Het is belangrijk dat Expression eigenschappen consistent hetzelfde ReadOnlyCollection<T>retourneren. Anders zal de rewriter tree walker die door expressiebezoekers wordt gebruikt, breken. Het is een belangrijke wijziging van LINQ v1 om anders ReadOnlyCollection<T> te retourneren dan hetzelfde Expression knooppunt. Momenteel kunnen gebruikers vertrouwen op objectidentiteit om te zien of het knooppunt is gewijzigd. Het opslaan van het ReadOnlyCollection<T> in een overbelast veld vermindert zowel het geheugengebruik als onderhoudt de compatibiliteit voor de openbare API.

Eigenschappen

Name Description
ArgumentCount

Retourneert het aantal argumenten naar het knooppunt van de expressiestructuur. Deze API is alleen bedoeld voor intern gebruik.

Methoden

Name Description
GetArgument(Int32)

Retourneert het argument bij index, waarbij wordt gegooid als index deze buiten de grenzen valt. Deze API is alleen bedoeld voor intern gebruik.

Van toepassing op