IArgumentProvider Interface
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece uma interface interna para aceder aos argumentos de múltiplos nós de árvore (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Esta API é apenas para uso interno.
public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
- Derivado
Observações
Não deve usar esta API. É pública apenas devido à refatoração de assembly, e existe apenas para otimizações internas de desempenho. Permite duas otimizações que reduzem o tamanho das árvores:
Permite que os nós mantenham um IList<T> em vez de um ReadOnlyCollection<T>. Isto poupa o custo de alocar a coleção de apenas leitura para cada nó.
Permite criar subclasses especializadas que mantêm um número específico de argumentos (por exemplo,
Block2,Block2,Block4). Portanto, estes nós evitam alocar tanto a ReadOnlyCollection<T> como um array para armazenar os seus elementos, poupando assim 32 bytes por nó. Esta técnica é usada por vários nós, incluindo BlockExpression, InvocationExpression, e MethodCallExpression.
Os nós da árvore de expressões continuam a expor as propriedades originais do LINQ dos ReadOnlyCollection<T> objetos. Fazem isto reutilizando um campo para armazenar tanto o array como um elemento que normalmente seria armazenado no array.
Para o caso do array, a coleção é tipada em IList<T> vez de ReadOnlyCollection<T>. Quando o nó é inicialmente construído, é um array. O compilador ou utilitários desta biblioteca acedem aos elementos através desta interface. Aceder a elementos do array promove o array para um ReadOnlyCollection<T>.
No caso do objeto, o primeiro argumento é armazenado num campo tipado em Object. Quando o nó é inicialmente construído, este campo detém o Expression do primeiro argumento. Quando o compilador e as utilitárias desta biblioteca acedem aos argumentos, voltam a usar esta interface, e o acessório para o primeiro argumento usa o método interno Expression.ReturnObject<T>(System.Object) helper para devolver o objeto que gere o Expression caso ou ReadOnlyCollection<T> . Quando o utilizador acede ao ReadOnlyCollection<T>, o campo objeto é atualizado para se manter diretamente no ReadOnlyCollection<T>.
É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o rewriter tree walker usado pela expressão visitantes irá quebrar-se. É uma mudança total em relação ao LINQ v1 devolver algo diferente ReadOnlyCollection<T> do mesmo Expression nó. Atualmente, os utilizadores podem confiar na identidade do objeto para saber se o nó mudou. Armazenar o ReadOnlyCollection<T> num campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.
Propriedades
| Name | Description |
|---|---|
| ArgumentCount |
Devolve o número de argumentos ao nó da árvore de expressões. Esta API é apenas para uso interno. |
Métodos
| Name | Description |
|---|---|
| GetArgument(Int32) |
Retorna o argumento em |