OutAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje, że dane powinny być marshalowane z wywołania z powrotem do obiektu wywołującego.
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
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie pokazano, jak zastosować InAttribute element i OutAttribute do platformy wywołać prototyp, który przekazuje tablicę jako parametr. Kombinacja atrybutów kierunkowych umożliwia obiektowi wywołującym wyświetlanie zmian wprowadzonych przez obiekt wywoływany.
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
Uwagi
Ten atrybut można zastosować do parametrów.
Parametr OutAttribute jest opcjonalny. Atrybut jest obsługiwany tylko w przypadku międzyoperacyjnego modelu COM i wywoływania platformy. W przypadku braku jawnych ustawień marshaler międzyoperacyjny zakłada reguły oparte na typie parametru, niezależnie od tego, czy parametr jest przekazywany przez odwołanie, czy przez wartość, oraz czy typ jest blittable, czy nienależący do wartości. Na przykład klasa jest zawsze zakładana jako In/Out, a przyjmuje się, StringBuilder że tablica ciągów przekazywanych przez wartość ma wartość In.
Zachowanie tylko poza wartością nigdy nie jest domyślnym zachowaniem marshalingu dla parametrów. Można zastosować OutAttribute wartość do typów wartości i odwołań przekazanych przez odwołanie, aby zmienić zachowanie w/wy na zachowanie tylko dla wyjścia, co jest równoważne użyciu słowa kluczowego out w języku C#. Na przykład tablice przekazywane przez wartość, przesłoniętą jako parametry tylko domyślnie, można zmienić na wartość Tylko do wyjścia. Jednak zachowanie nie zawsze zapewnia oczekiwaną semantykę, gdy typy zawierają wszystkie elementy lub pola, ponieważ marshaler międzyoperacyjny używa przypinania. Jeśli nie zależy Ci na przekazywaniu danych do wywoływanego, marshaling tylko dla out-only może zapewnić lepszą wydajność dla typów nienależących do blittable.
Łączenie elementów InAttribute i OutAttribute jest szczególnie przydatne w przypadku zastosowania do tablic i sformatowanych typów nielittable. Osoby wywołujące widzą zmiany wprowadzane przez obiekt wywoływany do tych typów tylko wtedy, gdy stosujesz oba atrybuty. Ponieważ te typy wymagają kopiowania podczas marshalingu, można użyć polecenia InAttribute i OutAttribute zmniejszyć niepotrzebne kopie.
Konstruktory
| Nazwa | Opis |
|---|---|
| OutAttribute() |
Inicjuje nowe wystąpienie klasy OutAttribute. |
Właściwości
| Nazwa | Opis |
|---|---|
| TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute. (Odziedziczone po Attribute) |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| GetHashCode() |
Zwraca kod skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| IsDefaultAttribute() |
Po zastąpieniu w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
| Match(Object) |
Po zastąpieniu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie obiektu, którego można użyć do uzyskania informacji o typie dla interfejsu. (Odziedziczone po Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Zapewnia dostęp do właściwości i metod uwidocznionych przez obiekt. (Odziedziczone po Attribute) |