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). Esta API é somente 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 é público somente 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, ,Block4Block2). Portanto, esses nós evitam alocar uma ReadOnlyCollection<T> matriz e 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 como IList<T> em 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 mantém o Expression do primeiro argumento. Quando o compilador e os utilitários nesta biblioteca acessam os argumentos, eles novamente usam 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 Expression caso ou ReadOnlyCollection<T> . Quando o usuário acessa o ReadOnlyCollection<T>, o campo de objeto é atualizado para manter diretamente no ReadOnlyCollection<T>.
É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o andador de árvore de reescrita usado pelos visitantes da expressão será interrompido. É uma alteração interruptiva 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 o ReadOnlyCollection<T> em um campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.
Propriedades
| ArgumentCount |
Retorna o número de argumentos para o nó de árvore de expressão. Esta API é somente para uso interno. |
Métodos
| GetArgument(Int32) |
Retorna o argumento no |