OutAttribute Classe

Definição

Indica que os dados devem ser orientados do chamado 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 seguinte mostra como aplicar o InAttribute e OutAttribute a um protótipo de invocação de plataforma que passa um array como parâmetro. A combinação de atributos direcionais permite ao chamador ver as alterações feitas pelo chamado.

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

Observações

Pode aplicar este atributo a parâmetros.

É OutAttribute opcional. O atributo é suportado apenas para interoperabilidade COM e invocação de plataforma. Na ausência de definições explícitas, o marshaler de interoperabilidade assume regras com base no tipo de parâmetro, se o parâmetro é passado por referência ou por valor, e se o tipo é blitável ou não. Por exemplo, assume-se sempre que a StringBuilder classe é In/Out e um array de cadeias passadas por valor é assumido como In.

O comportamento apenas de saída nunca é um comportamento padrão de marshaling para parâmetros. Pode aplicar os OutAttribute tipos de valor to e referência passados por referência para alterar o comportamento In/Out para comportamento apenas Out, o que equivale a usar a out palavra-chave em C#. Por exemplo, arrays passados por valor, marshalados como parâmetros In-only por defeito, podem ser alterados para Out-only. No entanto, o comportamento nem sempre fornece a semântica esperada quando os tipos incluem elementos ou campos all-blittable porque o marshaler de interoperabilidade usa pinning. Se não se importar em passar dados para o chamado, o marshaling Out-only pode proporcionar melhor desempenho para tipos não blitáveis.

Combinar os InAttribute e OutAttribute é particularmente útil quando aplicado a arrays e tipos formatados, não blitáveis. Os chamadores só veem as alterações que um chamado faz a estes tipos quando aplicas ambos os atributos. Como estes tipos requerem cópia durante o marshaling, pode usar InAttribute e OutAttribute reduzir cópias desnecessárias.

Para mais informações sobre o efeito do OutAttribute comportamento de marshaling, veja Atributos Direcionais.

Construtores

Name Description
OutAttribute()

Inicializa uma nova instância da OutAttribute classe.

Propriedades

Name Description
TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

Métodos

Name Description
Equals(Object)

Devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código de hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

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

Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

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

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

(Herdado de Attribute)

Aplica-se a

Ver também