Condividi tramite


OutAttribute Classe

Definizione

Indica che il marshalling dei dati deve essere effettuato dal chiamato al chiamante.

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
Ereditarietà
OutAttribute
Attributi

Esempio

Nell'esempio seguente viene illustrato come applicare e InAttributeOutAttribute a un prototipo di piattaforma invoke che passa una matrice come parametro. La combinazione di attributi direzionali consente al chiamante di visualizzare le modifiche apportate dal chiamante.

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

Commenti

È possibile applicare questo attributo ai parametri.

È OutAttribute facoltativo. L'attributo è supportato solo per l'interoperabilità COM e l'richiamare la piattaforma. In assenza di impostazioni esplicite, il marshalling dell'interoperabilità presuppone regole in base al tipo di parametro, se il parametro viene passato per riferimento o per valore e se il tipo è blittable o non blittable. Ad esempio, si presuppone che la StringBuilder classe sia sempre In/Out e che una matrice di stringhe passate per valore sia In.

Il comportamento out-only non è mai un comportamento di marshalling predefinito per i parametri. È possibile applicare il OutAttribute valore e i tipi di riferimento passati dal riferimento per modificare il comportamento In/Out al comportamento out-only, equivalente all'uso della out parola chiave in C#. Ad esempio, le matrici passate per valore, marshallate come parametri solo in-only per impostazione predefinita, possono essere modificate in Out-only. Tuttavia, il comportamento non fornisce sempre la semantica prevista quando i tipi includono elementi o campi blittable perché il marshalling dell'interoperabilità usa l'aggiunta. Se non ci si preoccupa di passare i dati nella chiamata, il marshalling out-only può offrire prestazioni migliori per i tipi non blittable.

La combinazione di InAttribute e OutAttribute è particolarmente utile quando si applicano a matrici e tipi non blittable. I chiamanti visualizzano le modifiche apportate a questi tipi solo quando si applicano entrambi gli attributi. Poiché questi tipi richiedono la copia durante il marshalling, è possibile usare InAttribute e OutAttribute ridurre le copie non necessarie.

Per altre informazioni sull'effetto del comportamento di OutAttribute marshalling, vedere Attributi direzionali.

Costruttori

OutAttribute()

Inizializza una nuova istanza della classe OutAttribute.

Proprietà

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Vedi anche