Atributos direcionais

Definição - o que significam os atributos direcionais?

Atributos direcionais, em C #, são tags usadas para especificar parâmetros de métodos de objetos com informações relacionadas ao fluxo direcional de dados entre o chamador e o receptor.

Os atributos direcionais controlam o empacotamento - onde um objeto é preparado para transferência através de um aplicativo ou limite de processo - da direção do parâmetro do método e valores de retorno. Os atributos direcionais são aplicados para modificar o empacotamento do tempo de execução durante a comunicação do código gerenciado, que é executado pelo Common Language Runtime (CLR), e do código não gerenciado, que é executado fora do controle do CLR.

Definirtec explica os atributos direcionais

InAttribute e OutAttribute são os dois atributos direcionais C # usados ​​para mapear para os atributos de Interface Definition Language (IDL) do Component Object Model (COM). InAttribute mapeia para [in] e OutAttribute mapeia para [out]. O valor de retorno da assinatura do método gerenciado mapeia para [out, retval] em uma biblioteca de tipos. É essencial especificar o atributo direcional correto para os parâmetros do método, de modo que a biblioteca de tipos de exportação defina corretamente os bits de entrada / saída.

Aplicando InAttribute e OutAttribute em arrays e tipos não blittable formatados (que não têm representação de memória gerenciada e não gerenciada comum), o chamador vê as alterações do callee. Os atributos direcionais aplicados a esses tipos reduzem as cópias desnecessárias durante o empacotamento.

Em C #, InAttribute e OutAttribute são usados ​​em três formas com duas palavras-chave durante a comunicação do chamador e do receptor, da seguinte maneira:

  • "out" - implica [OutAttribute]
  • "ref" - Implica [InAttribute], [OutAttribute]
  • (Nenhum especificado) - [InAttribute] (por padrão)

As palavras-chave out e ref são usadas para tipos de valor e tipos de referência serializáveis. A palavra-chave ref implica que o parâmetro é empacotado em ambas as direções e out implica transferência de dados do receptor. Quando ref ou out não são usados, isso significa que os dados são transferidos para o receptor.

Por exemplo, um aplicativo cliente .NET envia um valor de entrada para um método de componente COM, que calcula o resultado do valor de entrada e retorna o resultado ao cliente. Os atributos direcionais podem ser aplicados aos parâmetros do método atendendo à solicitação, indicando o tipo de empacotamento necessário para o valor de entrada e o resultado.

Os atributos direcionais têm as seguintes características:

  • Opcional e aplicado aos parâmetros do método em tempo de design
  • Suportado apenas para interoperabilidade COM e invocação de plataforma
  • InAttribute não pode ser aplicado a um parâmetro com uma palavra-chave out

O empacotador de interoperabilidade CLR fornece serviço de empacotamento em tempo de execução, manipulando argumentos de chamada de método e valores de retorno entre memória gerenciada e não gerenciada. Se os atributos direcionais não forem definidos, o empacotador determina o fluxo direcional com base no tipo de parâmetro e modificador (se houver). O empacotador opera da seguinte maneira:

  • Ele não substitui os dados passados ​​como um parâmetro "In" do código não gerenciado. Portanto, apenas dados somente leitura, como dados acessados ​​simultaneamente, podem ser transmitidos.
  • Ao passar objetos - como strings básicas ou binárias (BSTR) - com alocação de memória estabelecida, a sequência de alocação / desalocação adequada é seguida de acordo com as configurações de entrada / saída.

Esta definição foi escrita no contexto de C #