IArgumentProvider Interface
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
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
, ,Block4
Block2
). 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.
Argument |
Retorna o número de argumentos para o nó de árvore de expressão. Esta API é somente para uso interno. |
Get |
Retorna o argumento no |
Produto | Versões |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 1.3, 1.4, 1.6, 2.0, 2.1 |
UWP | 10.0 |
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: