Partilhar via


OutAttribute Classe

Definição

Indica que os dados devem passar por marshaling do receptor de volta ao chamador.

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
Herança
OutAttribute
Atributos

Exemplos

O exemplo a seguir mostra como aplicar o InAttribute e OutAttribute a um protótipo de invocação de plataforma que passa uma matriz como um parâmetro. A combinação de atributos direcionais permite que o chamador veja as alterações feitas pelo receptor.

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

Comentários

Você pode aplicar esse atributo a parâmetros.

O OutAttribute é opcional. O atributo tem suporte apenas para interoperabilidade COM e invocação de plataforma. Na ausência de configurações explícitas, o marshaler de interoperabilidade pressupõe regras com base no tipo de parâmetro, se o parâmetro é passado por referência ou por valor e se o tipo é blittable ou não blittable. Por exemplo, a StringBuilder classe sempre é considerada Entrada/Saída e uma matriz de cadeias de caracteres passadas por valor é considerada In.

O comportamento somente out-only nunca é um comportamento de marshaling padrão para parâmetros. Você pode aplicar o OutAttribute a tipos de valor e referência passados por referência para alterar o comportamento de Entrada/Saída para Comportamento somente saída, que é equivalente a usar a out palavra-chave em C#. Por exemplo, matrizes passadas por valor, empacotadas como parâmetros somente in por padrão, podem ser alteradas para Somente saída. No entanto, o comportamento nem sempre fornece semântica esperada quando os tipos incluem todos os elementos ou campos blittable porque o marshaler de interoperabilidade usa fixação. Se você não se importa em passar dados para o receptor, o marshaling somente out pode fornecer melhor desempenho para tipos não blittable.

Combinar o InAttribute e OutAttribute é particularmente útil quando aplicado a matrizes e tipos formatados e não blittable. Os chamadores veem as alterações feitas por um computador chamado a esses tipos somente quando você aplica ambos os atributos. Como esses tipos exigem cópia durante o marshaling, você pode usar InAttribute e OutAttribute reduzir cópias desnecessárias.

Para obter mais informações sobre o efeito do comportamento de OutAttribute marshaling, consulte Atributos direcionais.

Construtores

OutAttribute()

Inicializa uma nova instância da classe OutAttribute.

Propriedades

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a

Confira também