IArgumentProvider Rozhraní

Definice

Poskytuje interní rozhraní pro přístup k argumentům více uzlů stromu (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression a IndexExpression). Toto rozhraní API je pouze pro interní použití.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Odvozené

Poznámky

Toto rozhraní API byste neměli používat. Je veřejný pouze kvůli refaktoringu sestavení a existuje pouze pro interní optimalizace výkonu. Umožňuje dvě optimalizace, které zmenšují velikost stromů:

  1. Umožňuje uzlům místo IList<T>ReadOnlyCollection<T>. Tím se ušetří náklady na přidělení kolekce jen pro čtení pro každý uzel.

  2. Umožňuje vytvořit specializované podtřídy, které obsahují určitý počet argumentů (například Block2, Block2, ). Block4 Proto se tyto uzly vyhýbají přidělování polí i ReadOnlyCollection<T> polí pro ukládání jejich prvků, čímž ušetří 32 bajtů na uzel. Tuto techniku používají různé uzly, včetně BlockExpression, InvocationExpressiona MethodCallExpression.

Uzly stromu výrazů nadále zveřejňují původní vlastnosti ReadOnlyCollection<T> LINQ objektů. Docílí toho tak, že znovu použijí pole pro uložení pole nebo elementu, který by normálně byl uložen v poli.

V případě pole je kolekce zadána na IList<T> místo ReadOnlyCollection<T>. Při počátečním vytvoření uzlu se jedná o pole. Kompilátor nebo nástroje v této knihovně přistupují k elementům prostřednictvím tohoto rozhraní. Přístup k prvkům pole zvyšuje úroveň pole na ReadOnlyCollection<T>.

Pro případ objektu je první argument uložen v poli zadaném do Object. Při počátečním vytváření uzlu obsahuje toto pole Expression první argument. Když kompilátor a nástroje v této knihovně přistupují k argumentům, znovu používají toto rozhraní a přistupovač pro první argument používá interní Expression.ReturnObject<T>(System.Object) pomocné metody k vrácení objektu, který zpracovává Expression případ nebo ReadOnlyCollection<T> . Při přístupu uživatele k objektu ReadOnlyCollection<T>se pole objektu aktualizuje tak, aby se drželo přímo v objektu ReadOnlyCollection<T>.

Je důležité, aby Expression vlastnosti konzistentně vracely stejnou ReadOnlyCollection<T>hodnotu . V opačném případě se přeruší rewriter tree walker používaný výrazem návštěvníci. Jedná se o zásadní změnu oproti LINQ v1, která vrací jiný ReadOnlyCollection<T> než stejný Expression uzel. V současné době se uživatelé můžou spoléhat na identitu objektu a zjistit, jestli se uzel změnil. Uložení objektu v ReadOnlyCollection<T> přetíženém poli snižuje využití paměti a zachovává kompatibilitu s veřejným rozhraním API.

Vlastnosti

ArgumentCount

Vrátí počet argumentů do uzlu stromu výrazů. Toto rozhraní API je pouze pro interní použití.

Metody

GetArgument(Int32)

Vrátí argument pro index, vyvolání, pokud index je mimo hranice. Toto rozhraní API je pouze pro interní použití.

Platí pro