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 | |
---|---|---|
OutAttribute() | Initialisiert eine neue Instanz der OutAttribute-Klasse. |
Eigenschaften
Name | Beschreibung | |
---|---|---|
TypeId | Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.) |
Methoden
Name | Beschreibung | |
---|---|---|
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“.) |
|
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) | Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.) |
|
ToString() | Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.) |
Explizite Schnittstellenimplementierungen
Name | Beschreibung | |
---|---|---|
_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“.) |
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