OutAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- Attribute
Beispiele
Im folgenden Beispiel wird gezeigt, wie sie und InAttributeOutAttribute auf einen Plattformaufrufprototyp anwenden, der ein Array als Parameter übergibt. Die Kombination von Richtungsattributen ermöglicht es dem Aufrufer, die vom Angerufenen vorgenommenen Änderungen zu sehen.
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.
Der OutAttribute ist optional. Das Attribut wird nur für COM-Interop und Plattformaufrufe unterstützt. Wenn keine expliziten Einstellungen vorhanden sind, übernimmt der Interop-Marshaller Regeln basierend auf dem Parametertyp, ob der Parameter als Verweis oder Wert übergeben wird und ob der Typ blittbar oder nicht blittbar ist. Beispielsweise wird immer davon ausgegangen, dass die StringBuilder Klasse In/Out ist, und ein Array von Zeichenfolgen, die vom Wert übergeben werden, wird als In angenommen.
Out-Only-Verhalten ist nie ein Standardmäßiges Marshallverhalten für Parameter. Sie können die auf Wert- und Verweistypen anwenden, die OutAttribute per Verweis übergeben werden, um das In/Out-Verhalten auf das Out-Only-Verhalten zu ändern, was der Verwendung des out
Schlüsselworts in C# entspricht. Beispielsweise können Arrays, die als Wert übergeben werden und standardmäßig als in-only-Parameter gemarst werden, in Out-only geändert werden. Das Verhalten stellt jedoch nicht immer erwartete Semantik bereit, wenn die Typen alle blittbaren Elemente oder Felder enthalten, da der Interop-Marshaller das Anheften verwendet. Wenn Sie sich nicht darum kümmern, Daten an den Angerufenen zu übergeben, kann das Out-Only-Marshalling eine bessere Leistung für nicht zerteilbare Typen bieten.
Die Kombination von InAttribute und OutAttribute ist besonders nützlich, wenn sie auf Arrays und formatierte, nicht kleinteilige Typen angewendet wird. Anrufer sehen die Änderungen, die ein Angerufener an diesen Typen vornimmt, nur wenn Sie beide Attribute anwenden. Da diese Typen während des Marshallvorgangs kopieren müssen, können Sie und OutAttribute verwendenInAttribute, um unnötige Kopien zu reduzieren.
Weitere Informationen zur Auswirkung von OutAttribute auf das Marshallverhalten 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) |