Compartilhar via


OutAttribute Classe

Definição

Indica que os dados devem ser empacotados do destinatário do chamador de volta para o 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 protótipo de invocação de plataforma e OutAttribute a uma 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 destinatário.

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 como Entrada/Saída e uma matriz de cadeias de caracteres passadas por valor é considerada in.

O comportamento somente de saída nunca é um comportamento de marshaling padrão para parâmetros. Você pode aplicar os OutAttribute tipos de valor e referência passados por referência para alterar o comportamento de Entrada/Saída para o comportamento somente saída, o que equivale a usar a out palavra-chave em C#. Por exemplo, as 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 elementos ou campos totalmente blittable porque o marshaler de interoperabilidade usa fixação. Se você não se importar com a passagem de dados para o destinatário, 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 destinatário de chamada 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.

Construtores

Nome Description
OutAttribute()

Inicializa uma nova instância da classe OutAttribute.

Propriedades

Nome Description
TypeId

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

(Herdado de Attribute)

Métodos

Nome Description
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 dessa 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 Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
_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 de um objeto, que podem ser usadas para obter as informações de tipo de 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