Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout

OutAttribute, classe

Indique que les données doivent être marshalées de l'appelé vers l'appelant.

Espace de noms : System.Runtime.InteropServices
Assembly : mscorlib (dans mscorlib.dll)

[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)] 
public sealed class OutAttribute : Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) */ 
public final class OutAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) 
public final class OutAttribute extends Attribute

Vous pouvez appliquer cet attribut à des paramètres.

OutAttribute est facultatif. Cet attribut est uniquement pris en charge pour COM Interop et l'appel de plate-forme. En l'absence de paramètres explicites, le marshaleur d'interopérabilité suppose des règles en fonction du type de paramètre, par exemple si le paramètre est passé par référence ou par valeur et si le type est blittable ou non blittable. Ainsi, la classe StringBuilder est toujours supposée être en entrée/sortie et un tableau de chaînes passé par valeur est supposé être en entrée.

La sortie seule n'est jamais un comportement de marshaling par défaut pour les paramètres. Vous pouvez appliquer OutAttribute à des types valeur et référence passés par référence pour transformer le comportement d'entrée/sortie en comportement de sortie seule, ce qui équivaut à utiliser le mot clé out en langage C#. Ainsi, les tableaux passés par valeur, marshalés en tant que paramètres en entrée seule par défaut peuvent être changés en paramètres en sortie seule. Toutefois, le comportement ne fournit pas toujours la sémantique escomptée lorsque les types comprennent des champs ou des éléments blittables puisque le marshaleur d'interopérabilité utilise l'épinglage. Si le passage de données à l'appelé n'a pas d'importance pour vous, sachez que le marshaling en sortie seule peut offrir de meilleures performances pour les types non blittables.

L'utilisation conjointe de InAttribute et de OutAttribute est particulièrement utile dans le cas de tableaux et de types formatés et non blittables. Les appelants voient les modifications apportées par l'appelé à ces types uniquement lorsque vous appliquez les deux attributs. Ces types nécessitant une copie durant le marshaling, vous pouvez utiliser InAttribute et OutAttribute pour réduire le nombre de copies inutiles.

Pour plus d'informations sur l'effet de OutAttribute sur le comportement du marshaling, consultez Attributs directionnels.

L'exemple suivant montre comment appliquer InAttribute et OutAttribute à un prototype d'appel de plate-forme qui passe un tableau comme un paramètre. La combinaison d'attributs directionnels permet à l'appelant de consulter les modifications faites par l'appelé.

// Declare a class member for each structure element.
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Auto )]  
public class OpenFileName 
{
    public int       structSize = 0;
    public string    filter = null;
    public string    file = null;
    // ...
}

public class LibWrap
{
   // Declare a managed prototype for the unmanaged function.
   [ DllImport( "Comdlg32.dll", CharSet=CharSet.Auto )]
   public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn );  
}

// Declare a class member for each structure element.
/** @attribute StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)
 */
public class OpenFileName
{
    public int structSize = 0;
    public String filter = null;
    public String file = null;
    // ...
} //OpenFileName

public class LibWrap
{
    // Declare a managed prototype for the unmanaged function.
    /** @attribute DllImport("Comdlg32.dll", CharSet = CharSet.Auto)
     */
    public static native boolean GetOpenFileName(
        /** @attribute In()
            @attribute Out()
         */
        OpenFileName ofn);
} //LibWrap

System.Object
   System.Attribute
    System.Runtime.InteropServices.OutAttribute

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft