OutAttribute Klasse

Definition

Gibt an, dass Daten vom Aufgerufenen zurück zum Aufrufer gemarshallt werden sollen.

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
Vererbung
OutAttribute
Attribute

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie den InAttribute OutAttribute Prototyp einer Plattform anwenden, die ein Array als Parameter übergibt. Die Kombination von Richtungsattributen ermöglicht es dem Aufrufer, die von dem angerufenen Anrufer vorgenommenen Änderungen anzuzeigen.

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

Hinweise

Sie können dieses Attribut auf Parameter anwenden.

Dies OutAttribute ist optional. Das Attribut wird nur für COM-Interop- und Plattformaufrufe unterstützt. Ohne explizite Einstellungen nimmt der Interop-Marshaler Regeln basierend auf dem Parametertyp an, ob der Parameter durch Verweis oder Wert übergeben wird und ob der Typ blittbar oder nicht blittbar ist. Die Klasse wird z. B. immer als In/Out angenommen, und ein Array von Zeichenfolgen, die vom Wert übergeben werden, StringBuilder wird angenommen, dass sie in sein.

Das einzige Verhalten ist nie ein Standard-Marshalingverhalten für Parameter. Sie können den Wert- und Referenztypen anwenden, die OutAttribute durch Verweis auf das Änderungsverhalten in out-only-Verhalten übergeben werden, was der Verwendung des out Schlüsselworts in C#entspricht. Beispielsweise können Arrays, die vom Wert übergeben werden, standardmäßig als nur In-only-Parameter verschoben werden, nur in Out-Only geändert werden. Das Verhalten bietet jedoch nicht immer erwartete Semantik, wenn die Typen alle blittbaren Elemente oder Felder enthalten, da der Interop-Marshaler die Anheftung verwendet. Wenn Sie sich nicht darum kümmern, Daten an die angerufenen Daten zu übergeben, kann das nur out-only-Marshaling eine bessere Leistung für nicht blittbare Typen bieten.

Das Kombinieren der InAttribute OutAttribute Und ist besonders nützlich, wenn sie auf Arrays angewendet und formatierte, nicht blittbare Typen angewendet werden. Anrufer sehen die Änderungen, die ein Angerufene an diese Typen vorgenommen hat, nur dann, wenn Sie beide Attribute anwenden. Da diese Typen das Kopieren während des Marshalings erfordern, können Sie unnötige Kopien verwenden InAttribute und OutAttribute reduzieren.

Weitere Informationen zum Effekt des OutAttribute Marshalingverhaltens finden Sie unter " Richtungsattribute".

Konstruktoren

OutAttribute()

Initialisiert eine neue Instanz der OutAttribute-Klasse.

Eigenschaften

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

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

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

(Geerbt von Attribute)

Gilt für

Siehe auch