OutAttribute Klasa

Definicja

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
OutAttribute
Atrybuty

Przykłady

W poniższym przykładzie pokazano, jak zastosować InAttribute prototyp i OutAttribute do platformy, który przekazuje tablicę jako parametr. Kombinacja atrybutów kierunkowych umożliwia obiektowi wywołującego wyświetlanie zmian wprowadzonych przez wywoływanie.

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.

Element OutAttribute jest opcjonalny. Atrybut jest obsługiwany tylko w przypadku międzyoperacyjnego modelu COM i wywołania platformy. W przypadku braku jawnych ustawień marshaler międzyoperacyjny zakłada reguły oparte na typie parametru, czy parametr jest przekazywany przez odwołanie, czy według wartości, oraz czy typ jest blittable, czy nielimitowany. Na przykład przyjmuje się, że StringBuilder klasa ma być w/wy, a przyjmuje się, że tablica ciągów przekazywanych przez wartość ma być w.

Zachowanie tylko na wyjście nigdy nie jest domyślnym zachowaniem marshalingu dla parametrów. Można zastosować do OutAttribute typów wartości i odwołań przekazywanych przez odwołanie, aby zmienić zachowanie w/wy na zachowanie tylko dla wyjścia, które jest równoważne użyciu słowa kluczowego out w języku C#. Na przykład tablice przekazywane według wartości, marshaled jako parametry tylko domyślnie, można zmienić na wartość Tylko do wyjścia. Jednak zachowanie nie zawsze zapewnia oczekiwaną semantyka, gdy typy obejmują wszystkie elementy lub pola, ponieważ marshaler międzyoperacyjny używa przypinania. Jeśli nie dbasz o przekazywanie danych do metody wywoływanej, funkcja marshalingu tylko do wyjścia może zapewnić lepszą wydajność dla typów niezwiązanych z blittable.

Łączenie elementów InAttribute i OutAttribute jest szczególnie przydatne w przypadku zastosowania do tablic i sformatowanych, nielitarnych typów. Osoby wywołujące widzą zmiany wprowadzane do tych typów tylko wtedy, gdy stosujesz oba atrybuty. Ponieważ te typy wymagają kopiowania podczas marshalingu, można użyć InAttribute polecenia i OutAttribute zmniejszyć niepotrzebne kopie.

Aby uzyskać więcej informacji na temat wpływu działania marshalingu OutAttribute , zobacz Directional Attributes (Atrybuty kierunkowe).

Konstruktory

OutAttribute()

Inicjuje nowe wystąpienie klasy OutAttribute.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

W przypadku zastąpienia 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 Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

_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 pobrania informacji o typie 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)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też