Partage via


OutAttribute Classe

Définition

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

public ref class OutAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class OutAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OutAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
type OutAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type OutAttribute = class
    inherit Attribute
Public NotInheritable Class OutAttribute
Inherits Attribute
Héritage
OutAttribute
Attributs

Exemples

L’exemple suivant montre comment appliquer le InAttribute prototype d’appel de plateforme et OutAttribute d’appel de plateforme qui passe un tableau en tant que paramètre. La combinaison d’attributs directionnels permet à l’appelant de voir les modifications apportées par l’appelé.

using namespace System;
using namespace System::Runtime::InteropServices;

// Declare a class member for each structure element.

[StructLayout(LayoutKind::Sequential, CharSet = CharSet::Unicode)]
public ref class OpenFileName
{
public:
    int structSize;
    String^ filter;
    String^ file;
    // ...
};

private ref class NativeMethods
{
public:

    // Declare a managed prototype for the unmanaged function.

    [DllImport("Comdlg32.dll", CharSet = CharSet::Unicode)]
    static bool GetOpenFileName([In, Out]OpenFileName^ ofn);
};

void main() {}
using System.Runtime.InteropServices;
using System;

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

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

public class MainMethod
{
    static void Main()
    { }
}
Imports System.Runtime.InteropServices

' Declare a class member for each structure element.
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Class OpenFileName

    Public structSize As Integer = 0
    Public filter As String = Nothing
    Public file As String = Nothing
    ' ...

End Class

Friend Class NativeMethods
    ' Declare managed prototype for the unmanaged function.
    Friend Declare Unicode Function GetOpenFileName Lib "Comdlg32.dll" (
       <[In](), Out()> ByVal ofn As OpenFileName) As Boolean
End Class

Public Class App
    Public Shared Sub Main()

    End Sub
End Class

Remarques

Vous pouvez appliquer cet attribut aux paramètres.

Facultatif OutAttribute . L’attribut est pris en charge pour l’interopérabilité COM et l’appel de plateforme uniquement. En l’absence de paramètres explicites, le marshaleur d’interopérabilité suppose des règles basées sur le type de paramètre, si le paramètre est passé par référence ou par valeur, et si le type est blittable ou non blittable. Par exemple, la StringBuilder classe est toujours supposée être In/Out et un tableau de chaînes passées par valeur est supposé être In.

Le comportement out-only n’est jamais un comportement de marshaling par défaut pour les paramètres. Vous pouvez appliquer les OutAttribute types valeur et référence passés par référence pour modifier le comportement in/out en comportement Out uniquement, ce qui équivaut à utiliser le out mot clé en C#. Par exemple, les tableaux passés par valeur, marshalés en tant que paramètres in-only par défaut, peuvent être modifiés en out-only. Toutefois, le comportement ne fournit pas toujours de sémantique attendue lorsque les types incluent tous les éléments ou champs blittables, car le marshaleur d’interopérabilité utilise l’épinglage. Si vous ne vous souciez pas de transmettre des données à l’appelé, le marshaling out-only peut fournir de meilleures performances pour les types non blittables.

La combinaison des InAttribute tableaux et OutAttribute des types non blittables est particulièrement utile lorsqu’elles sont appliquées aux tableaux et aux types non blittables. Les appelants voient les modifications apportées à ces types uniquement lorsque vous appliquez les deux attributs. Étant donné que ces types nécessitent une copie pendant le marshaling, vous pouvez utiliser InAttribute et OutAttribute réduire les copies inutiles.

Constructeurs

Nom Description
OutAttribute()

Initialise une nouvelle instance de la classe OutAttribute.

Propriétés

Nom Description
TypeId

En cas d’implémentation dans une classe dérivée, obtient un identificateur unique pour cette Attribute.

(Hérité de Attribute)

Méthodes

Nom Description
Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage pour cette instance.

(Hérité de Attribute)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut de la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type d’un objet, qui peuvent être utilisées pour obtenir les informations de type d’une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l’accès aux propriétés et méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Voir aussi