MarshalAsAttribute Classe

Definição

Indica como realizar marshaling de dados entre código gerenciado e não gerenciado.

[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class MarshalAsAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : Attribute
Herança
MarshalAsAttribute
Atributos

Exemplos

O exemplo a seguir aplica o MarshalAsAttribute a um campo, um parâmetro de método e um valor de retorno de método em um tipo gerenciado.

using System;
using System.Text;
using System.Runtime.InteropServices;

class Program
{

//Applied to a parameter.
  public void M1([MarshalAs(UnmanagedType.LPWStr)]String msg) {}

//Applied to a field within a class.
  class MsgText {
                [MarshalAs(UnmanagedType.LPWStr)]
                public String msg = "Hello World";
                }

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
    public String GetMessage()
    {
        return "Hello World";
    }

static void Main(string[] args)
    {  }
}

O exemplo a seguir aplica o MarshalAsAttribute atributo a uma propriedade :

decimal _money;   

public decimal Money 
{
   [return: MarshalAs(UnmanagedType.Currency)]
   get { return this._money; }
   [param: MarshalAs(UnmanagedType.Currency)]
   set { this._money = value; }
}

Comentários

Você pode aplicar esse atributo a parâmetros, campos ou valores retornados.

Esse atributo é opcional, pois cada tipo de dados tem um comportamento de marshaling padrão. Esse atributo só é necessário quando um determinado tipo pode ter marshaling em vários tipos. Por exemplo, você pode realizar marshaling de uma cadeia de caracteres para código não gerenciado como um LPStr, um LPWStr, um LPTStrou um BStr. Por padrão, o Common Language Runtime realiza marshaling de um parâmetro de cadeia de caracteres como um BStr para métodos COM. Você pode aplicar o MarshalAsAttribute atributo a um campo ou parâmetro individual para fazer com que essa cadeia de caracteres específica seja empacotada como um LPStr em vez de um BStr. O Tlbexp.exe (Exportador da Biblioteca de Tipos) passa suas preferências de marshaling para o Common Language Runtime.

Alguns parâmetros e valores retornados têm um comportamento de marshaling padrão diferente quando usados com interoperabilidade COM ou invocação de plataforma. Por padrão, o runtime realiza marshaling de um parâmetro de cadeia de caracteres (e campos em um tipo de valor) como um LPStr para um método ou função de invocação de plataforma. Para obter informações adicionais, consulte Comportamento de marshaling padrão.

Na maioria dos casos, o atributo simplesmente identifica o formato dos dados não gerenciados usando a UnmanagedType enumeração , conforme mostrado na seguinte assinatura C#:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)

Alguns UnmanagedType membros de enumeração exigem informações adicionais. Por exemplo, informações adicionais são necessárias quando o UnmanagedType é LPArray. Para obter uma descrição completa de como usar esse atributo com matrizes, consulte Marshaling padrão para matrizes.

O Tlbimp.exe (Importador de Biblioteca de Tipos) também aplica esse atributo a parâmetros, campos e valores retornados para indicar que o tipo de dados na biblioteca de tipos de entrada não é o tipo padrão para o tipo de dados gerenciado correspondente. Tlbimp.exe sempre aplica os MarshalAsAttributeString tipos e Object para maior clareza, independentemente do tipo especificado na biblioteca de tipos de entrada.

Observação

O MarshalAsAttribute não dá suporte ao marshaling de tipos genéricos.

Construtores

MarshalAsAttribute(Int16)

Inicializa uma nova instância da classe MarshalAsAttribute com o valor UnmanagedType especificado.

MarshalAsAttribute(UnmanagedType)

Inicializa uma nova instância da classe MarshalAsAttribute com o membro de enumeração UnmanagedType especificado.

Campos

ArraySubType

Especifica o tipo de elemento do LPArray não gerenciado ou ByValArray.

IidParameterIndex

Especifica o índice do parâmetro do atributo iid_is não gerenciado usado por COM.

MarshalCookie

Fornece informações adicionais para um marshaler personalizado.

MarshalType

Especifica o nome totalmente qualificado de um marshaler personalizado.

MarshalTypeRef

Implementa MarshalType como um tipo.

SafeArraySubType

Indica o tipo de elemento de SafeArray.

SafeArrayUserDefinedSubType

Indica o tipo de elemento definido pelo usuário do SafeArray.

SizeConst

Indica o número de elementos na matriz de comprimento fixo ou o número de caracteres (não em bytes) em uma cadeia de caracteres a importar.

SizeParamIndex

Indica o parâmetro baseado em zero que contém a contagem de elementos da matriz, semelhante a size_is em COM.

Propriedades

TypeId

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

(Herdado de Attribute)
Value

Obtém o valor UnmanagedType como o qual deve ser realizado o mashal dos dados.

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

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também