IArgumentProvider Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Udostępnia wewnętrzny interfejs umożliwiający uzyskiwanie dostępu do argumentów wielu węzłów drzewa (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression i IndexExpression). Ten interfejs API jest przeznaczony tylko do użytku wewnętrznego.
public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
- Pochodne
Uwagi
Nie należy używać tego interfejsu API. Jest ona publiczna tylko ze względu na refaktoryzację zestawu i istnieje tylko w przypadku wewnętrznych optymalizacji wydajności. Umożliwia ona dwie optymalizacje, które zmniejszają rozmiar drzew:
Umożliwia on węzłom trzymanie na obiekcie IList<T> zamiast ReadOnlyCollection<T>. Pozwala to zaoszczędzić koszt przydzielania kolekcji tylko do odczytu dla każdego węzła.
Umożliwia utworzenie wyspecjalizowanych podklas, które przechowują określoną liczbę argumentów (na przykład
Block2
, ,Block2
).Block4
W związku z tym te węzły unikają przydzielania zarówno tablicy, jak ReadOnlyCollection<T> i do przechowywania ich elementów, co pozwala zaoszczędzić 32 bajty na węzeł. Ta technika jest używana przez różne węzły, w tym BlockExpression, InvocationExpressioni MethodCallExpression.
Węzły drzewa wyrażeń nadal uwidaczniają oryginalne właściwości ReadOnlyCollection<T> LINQ obiektów. Robią to przez ponowne użycie pola do przechowywania zarówno tablicy, jak i elementu, który normalnie będzie przechowywany w tablicy.
W przypadku przypadku tablicy kolekcja jest wpisana na IList<T> wartość zamiast ReadOnlyCollection<T>. Gdy węzeł jest początkowo skonstruowany, jest tablicą. Kompilator lub narzędzia w tej bibliotece uzyskują dostęp do elementów za pośrednictwem tego interfejsu. Uzyskiwanie dostępu do elementów tablicy zwiększa poziom tablicy do obiektu ReadOnlyCollection<T>.
W przypadku przypadku obiektu pierwszy argument jest przechowywany w polu wpisanym do Object. Gdy węzeł jest początkowo skonstruowany, to pole zawiera Expression pierwszy argument. Gdy kompilator i narzędzia w tej bibliotece uzyskują dostęp do argumentów, ponownie używają tego interfejsu, a metoda dostępu dla pierwszego argumentu używa metody wewnętrznej Expression.ReturnObject<T>(System.Object)
pomocnika, aby zwrócić obiekt obsługujący literę Expression lub ReadOnlyCollection<T> . Gdy użytkownik uzyskuje dostęp do ReadOnlyCollection<T>obiektu , pole obiektu jest aktualizowane w celu przechowywania bezpośrednio na obiekcie ReadOnlyCollection<T>.
Ważne jest, aby Expression właściwości stale zwracały te same ReadOnlyCollection<T>wartości . W przeciwnym razie spacernik drzewa ponownego tworzenia używany przez odwiedzających wyrażenie zostanie przerwany. Jest to zmiana powodująca niezgodność z LINQ w wersji 1, która będzie zwracać inny ReadOnlyCollection<T> niż ten sam Expression węzeł. Obecnie użytkownicy mogą polegać na tożsamości obiektu, aby określić, czy węzeł uległ zmianie. ReadOnlyCollection<T> Przechowywanie w przeciążonym polu zmniejsza użycie pamięci i utrzymuje zgodność z publicznym interfejsem API.
Właściwości
ArgumentCount |
Zwraca liczbę argumentów do węzła drzewa wyrażeń. Ten interfejs API jest przeznaczony tylko do użytku wewnętrznego. |
Metody
GetArgument(Int32) |
Zwraca argument w parametrze |