IArgumentProvider Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma interface interna para acessar os argumentos de vários nós de árvore (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Essa API é apenas para uso interno.
public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
- Derivado
Comentários
Você não deve usar essa API. Ele só é público devido à refatoração de assembly e existe apenas para otimizações de desempenho internas. Ele habilita duas otimizações que reduzem o tamanho das árvores:
Ele permite que os nós se segurem em um IList<T> em vez de um ReadOnlyCollection<T>. Isso economiza o custo de alocar a coleção somente leitura para cada nó.
Ele permite que subclasses especializadas sejam criadas que se mantêm em um número específico de argumentos (por exemplo,
Block2, ,Block2,Block4). Portanto, esses nós evitam alocar uma matriz e uma ReadOnlyCollection<T> matriz para armazenar seus elementos, salvando assim 32 bytes por nó. Essa técnica é usada por vários nós, incluindo BlockExpression, InvocationExpressione MethodCallExpression.
Os nós de árvore de expressão continuam a expor as propriedades LINQ originais dos ReadOnlyCollection<T> objetos. Eles fazem isso reutilizando um campo para armazenar a matriz ou um elemento que normalmente seria armazenado na matriz.
Para o caso da matriz, a coleção é digitada em IList<T> vez de ReadOnlyCollection<T>. Quando o nó é inicialmente construído, ele é uma matriz. O compilador ou os utilitários nesta biblioteca acessam os elementos por meio dessa interface. Acessar elementos de matriz promove a matriz para um ReadOnlyCollection<T>.
Para o caso do objeto, o primeiro argumento é armazenado em um campo digitado como Object. Quando o nó é inicialmente construído, esse campo contém o Expression primeiro argumento. Quando o compilador e os utilitários nesta biblioteca acessam os argumentos, eles usam novamente essa interface e o acessador do primeiro argumento usa o método auxiliar interno Expression.ReturnObject<T>(System.Object) para retornar o objeto que manipula o caso ou Expression o ReadOnlyCollection<T> objeto. Quando o usuário acessa o ReadOnlyCollection<T>campo de objeto, ele é atualizado para manter-se diretamente no ReadOnlyCollection<T>.
É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o caminhante de árvore de reescrita usado pelos visitantes da expressão será interrompido. É uma alteração significativa do LINQ v1 para retornar diferente ReadOnlyCollection<T> do mesmo Expression nó. Atualmente, os usuários podem confiar na identidade do objeto para saber se o nó foi alterado. Armazenar em ReadOnlyCollection<T> um campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.
Propriedades
| Nome | Description |
|---|---|
| ArgumentCount |
Retorna o número de argumentos para o nó da árvore de expressão. Essa API é apenas para uso interno. |
Métodos
| Nome | Description |
|---|---|
| GetArgument(Int32) |
Retorna o argumento em |