Attributs directionnels

Définition - Que signifient les attributs directionnels?

Les attributs directionnels, en C #, sont des balises utilisées pour spécifier le (s) paramètre (s) de méthode objet avec des informations liées au flux directionnel de données entre l'appelant et l'appelé.

Les attributs directionnels contrôlent le marshaling - où un objet est préparé pour le transfert à travers une application ou une limite de processus - de la direction et des valeurs de retour du paramètre de méthode. Les attributs directionnels sont appliqués pour modifier le marshaling d'exécution tout en communiquant du code managé, qui est exécuté par le Common Language Runtime (CLR), et du code non managé, qui est exécuté en dehors du contrôle du CLR.

Definir Tech explique les attributs directionnels

InAttribute et OutAttribute sont les deux attributs directionnels C # utilisés pour mapper aux attributs IDL (Interface Definition Language) du Component Object Model (COM). InAttribute est mappé à [in] et OutAttribute mappe à [out]. La valeur de retour de la signature de la méthode gérée correspond à [out, retval] dans une bibliothèque de types. Il est essentiel de spécifier le bon attribut directionnel pour les paramètres de méthode, afin que la bibliothèque de types d'exportation définisse correctement les bits d'entrée / sortie.

En appliquant InAttribute et OutAttribute dans des tableaux et des types non blittables formatés (qui n'ont pas de représentation de mémoire gérée et non gérée commune), l'appelant voit les modifications de l'appelé. Les attributs directionnels appliqués à ces types réduisent les copies inutiles lors du marshaling.

En C #, InAttribute et OutAttribute sont utilisés sous trois formes avec deux mots clés lors de la communication de l'appelant et de l'appelé, comme suit:

  • "out" - Implique [OutAttribute]
  • "ref" - Implique [InAttribute], [OutAttribute]
  • (Aucun spécifié) - [InAttribute] (par défaut)

Les mots clés out et ref sont utilisés pour les types valeur et les types référence sérialisables. Le mot-clé ref implique que le paramètre est marshalé dans les deux sens, et out implique un transfert de données appelé. Lorsque ref ou out ne sont pas utilisés, cela implique que les données sont transférées à l'appelé.

Par exemple, une application cliente .NET envoie une valeur d'entrée à une méthode de composant COM, qui calcule le résultat de la valeur d'entrée et renvoie le résultat au client. Les attributs directionnels peuvent être appliqués aux paramètres de la méthode traitant la demande en indiquant le type de marshaling requis pour la valeur d'entrée et le résultat.

Les attributs directionnels ont les caractéristiques suivantes:

  • Facultatif et appliqué aux paramètres de méthode au moment de la conception
  • Pris en charge pour l'interopérabilité COM et l'appel de plateforme uniquement
  • InAttribute ne peut pas être appliqué à un paramètre avec un mot clé out

Le marshaleur d'interopérabilité CLR fournit un service de marshaling au moment de l'exécution en gérant les arguments d'appel de méthode et en retournant les valeurs entre la mémoire gérée et non gérée. Si les attributs directionnels ne sont pas définis, le marshaleur détermine le flux directionnel en fonction du type de paramètre et du modificateur (le cas échéant). Le marshaleur fonctionne de la manière suivante:

  • Il n'écrase pas les données transmises en tant que paramètre «In» à partir du code non managé. Ainsi, seules les données en lecture seule, comme les données accédées simultanément, peuvent être transmises.
  • Lors du passage d'objets - tels que des chaînes de base ou binaires (BSTR) - avec une allocation de mémoire établie, la séquence d'allocation / désallocation appropriée est suivie en fonction des paramètres d'entrée / sortie.

Cette définition a été écrite dans le contexte de C #