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 Angerufenen zurück an den Anrufer gemarstet 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
Das folgende Beispiel zeigt, wie Sie den Prototyp OutAttribute einer InAttribute Plattform anwenden, die ein Array als Parameter übergibt. Die Kombination von direktionalen Attributen ermöglicht es dem Aufrufer, die vom Angerufenen 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-Interoperabilität und Plattform-Aufruf unterstützt. Wenn keine expliziten Einstellungen vorhanden sind, geht der Interop marshaler von Regeln basierend auf dem Parametertyp aus, unabhängig davon, 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 es wird angenommen, StringBuilder dass ein Array von Zeichenfolgen, die durch den Wert übergeben werden, in.
Das ausschließliche Verhalten ist niemals ein Standardmäßiges Marshaling-Verhalten für Parameter. Sie können die Wert- und Verweistypen anwenden, die OutAttribute durch Verweis übergeben werden, um das In/Out-Verhalten auf das "Out-only"-Verhalten zu ändern. Dies entspricht der Verwendung des out Schlüsselworts in C#. Arrays, die standardmäßig als Nur-Parameter gemarstet werden, können beispielsweise standardmäßig in "Out-only" geändert werden.For example, passed by value, marshaled as In-only parameters by default, can be changed to Out-only. Das Verhalten stellt jedoch nicht immer erwartete Semantik bereit, wenn die Typen all-blittable Elemente oder Felder enthalten, da der Interop marshaler pinning verwendet. Wenn Sie sich nicht darum kümmern, Daten an den Angerufenen zu übergeben, kann out-only Marshaling eine bessere Leistung für nicht zerkleinerbare Typen bieten.
Das Kombinieren der InAttribute Matrix und OutAttribute ist besonders nützlich, wenn sie auf Arrays und formatierte, nicht unterschreibbare 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 Marshallings kopieren müssen, können Sie unnötige Kopien verwenden InAttribute und OutAttribute reduzieren.
Konstruktoren
| Name | Beschreibung |
|---|---|
| OutAttribute() |
Initialisiert eine neue Instanz der OutAttribute-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| TypeId |
Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute. (Geerbt von Attribute) |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht. (Geerbt von Attribute) |
| GetHashCode() |
Gibt den Hashcode für diese Instanz zurück. (Geerbt von Attribute) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| IsDefaultAttribute() |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist. (Geerbt von Attribute) |
| Match(Object) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht. (Geerbt von Attribute) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| 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 denen 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) |
Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden. (Geerbt von Attribute) |