Share via


OutAttribute Classe

Définition

Indique que les données doivent être marshalées depuis 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 et InAttributeOutAttribute à un prototype 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.

OutAttribute est facultatif. L’attribut est pris en charge uniquement pour l’interopérabilité COM et l’appel de plateforme. 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 transmis 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 aux types de valeur et de référence passés par référence pour modifier le OutAttribute comportement In/Out en comportement Out-only, 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 remplacés par Out-only. Toutefois, le comportement ne fournit pas toujours la sémantique attendue lorsque les types incluent des éléments ou des champs entièrement blittables, car le marshaleur d’interopérabilité utilise l’épinglage. Si vous ne vous souciez pas de transmettre des données dans le destinataire appelé, le marshaling out-only peut fournir de meilleures performances pour les types non blittables.

La combinaison de et InAttributeOutAttribute est particulièrement utile lorsqu’elle est appliquée à des tableaux et à des types mis en forme non blittables. Les appelants voient les modifications apportées par un appelé à 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 pour réduire les copies inutiles.

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

Constructeurs

OutAttribute()

Initialise une nouvelle instance de la classe OutAttribute.

Propriétés

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)

Méthodes

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 de cette instance.

(Hérité de Attribute)
GetType()

Obtient le 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 pour la classe dérivée.

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

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

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

(Hérité de Object)

Implémentations d’interfaces explicites

_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 pour 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 aux méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Voir aussi