Freigeben über


OutAttribute-Klasse

 

Veröffentlicht: Oktober 2016

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

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Vererbungshierarchie

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

Syntax

[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class OutAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Parameter, Inherited = false)]
[ComVisibleAttribute(true)]
public ref class OutAttribute sealed : Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)>]
[<ComVisibleAttribute(true)>]
type OutAttribute = 
    class
        inherit Attribute
    end
<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited := False)>
<ComVisibleAttribute(True)>
Public NotInheritable Class OutAttribute
    Inherits Attribute

Konstruktoren

Name Beschreibung
System_CAPS_pubmethod OutAttribute()

Initialisiert eine neue Instanz der OutAttribute-Klasse.

Eigenschaften

Name Beschreibung
System_CAPS_pubproperty TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.)

Methoden

Name Beschreibung
System_CAPS_pubmethod Equals(Object)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethod GetHashCode()

Gibt den Hashcode für diese Instanz zurück.(Geerbt von „Attribute“.)

System_CAPS_pubmethod GetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethod 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“.)

System_CAPS_pubmethod Match(Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethod ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

Explizite Schnittstellenimplementierungen

Name Beschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _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“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfoCount(UInt32)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod _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“.)

Hinweise

Sie können dieses Attribut auf Parameter anwenden.

Die OutAttribute ist optional. Das Attribut wird unterstützt, für COM-Interop und Plattformaufrufe nur. In Ermangelung explizite Einstellungen angenommen der Interop-Marshaller Regeln basiert auf dem Parameter, Typ gibt an, ob der Parameter als Verweis oder als Wert übergeben wird und gibt an, ob der Typ für Blitvorgänge geeignet oder nicht für Blitvorgänge ist. Zum Beispiel die StringBuilder Klasse wird immer als In/Out und wird davon ausgegangen, dass ein Array von Zeichenfolgen nach Wert übergeben werden.

Nur Out-Verhalten stellt nie Marshallingverhalten für Parameter. Können Sie anwenden der OutAttribute auf Wert- und Referenztypen übergeben als Verweis auf die In/Out-Verhalten in reine Out-Verhalten zu ändern, entspricht der Verwendung der out -Schlüsselwort in c#. Arrays nach Wert übergeben, als In-Parameter gemarshallt werden, in der Standardeinstellung können z. B. zu außenumgrenzung geändert werden. Das Verhalten wird jedoch immer bietet keine erwartete Semantik, wenn die Typen vollständig blitfähige Elemente enthalten, oder Felder, da der Interop-Marshaller eine Fixierung verwendet. Wenn die Übergabe von Daten an die aufgerufene Methode unerheblich ist, kann die außenumgrenzung Marshalling eine bessere Leistung für nicht blitfähige Typen bereitstellen.

Kombinieren der InAttribute und OutAttribute ist besonders nützlich, wenn auf Arrays und formatierte, nicht blitfähige Typen. Aufrufer finden Sie die Änderungen, die eine aufgerufene Funktion diese Typen werden nur dann, wenn Sie beide Attribute anwenden. Da diese Typen, die während des Marshallens Kopiervorgänge erforderlich sind, können Sie InAttribute und OutAttribute nicht benötigte Kopien reduzieren.

Weitere Informationen über die Auswirkung des OutAttribute auf das Marshallingverhalten finden Sie unter direktionale Attribute.

Beispiele

Das folgende Beispiel zeigt, wie Sie anwenden der InAttribute und OutAttribute in einem Plattformaufrufe Prototyp, der ein Array als Parameter übergeben wird. Die Kombination von direktionalen Attribute kann der Aufrufer die vom aufgerufenen vorgenommenen Änderungen finden Sie unter.

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;
    // ...
}

public class LibWrap
{
    // Declare a managed prototype for the unmanaged function.
    [DllImport("Comdlg32.dll", CharSet = CharSet.Unicode)]
    public 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 'OpenFileName

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

Public Class App
    Public Shared Sub Main()

    End Sub 'Main
End Class 'App
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;
   // ...
};

public ref class LibWrap
{
public:

   // Declare a managed prototype for the unmanaged function.

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

void main() {}

Versionsinformationen

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Threadsicherheit

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Siehe auch

InAttribute
StringBuilder
System.Runtime.InteropServices-Namespace
Blittable and Non-Blittable Types

Zurück zum Anfang