OutAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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) |