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 #