MarshalAsAttribute Clase

Definición

Indica cómo serializar los datos entre código administrado y no administrado.

public ref class MarshalAsAttribute sealed : Attribute
[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
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)>]
type MarshalAsAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MarshalAsAttribute = class
    inherit Attribute
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
Herencia
MarshalAsAttribute
Atributos

Ejemplos

En el ejemplo siguiente se aplica a MarshalAsAttribute un campo, un parámetro de método y un valor devuelto de método en un tipo administrado.

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)
    {  }
}
Imports System.Runtime.InteropServices

Module Module1

    Sub Main()

    End Sub

    'Applied to a parameter.
    Public Sub M1(<MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal msg As String)
        msg = msg + "Goodbye"
    End Sub

    'Applied to a field within a class.
    Class MsgText
        <MarshalAsAttribute(UnmanagedType.LPWStr)> Public msg As String
    End Class

    'Applied to a return value.
    Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
        Return "Hello World"
    End Function

End Module

En el ejemplo siguiente se aplica el MarshalAsAttribute atributo a una propiedad :

decimal _money;   

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

Public Property Money As <MarshalAs(UnmanagedType.Currency)> Decimal 
   Get
      Return Me._money
   End Get
   Set(<MarshalAs(UnmanagedType.Currency)> value As Decimal)
      Me._money = value
   End Set   
End Property

Comentarios

Puede aplicar este atributo a parámetros, campos o valores devueltos.

Este atributo es opcional, ya que cada tipo de datos tiene un comportamiento de serialización predeterminado. Este atributo solo es necesario cuando un tipo determinado se puede serializar en varios tipos. Por ejemplo, puede serializar una cadena en código no administrado como , LPStro LPWStrLPTStr.BStr De forma predeterminada, Common Language Runtime serializa un parámetro de cadena como métodos BStr COM. Puede aplicar el MarshalAsAttribute atributo a un campo o parámetro individual para hacer que esa cadena determinada se serializa como una LPStr en lugar de .BStr El Tlbexp.exe (exportador de biblioteca de tipos) pasa las preferencias de cálculo de referencias a Common Language Runtime.

Algunos parámetros y valores devueltos tienen un comportamiento de serialización predeterminado diferente cuando se usa con interoperabilidad COM o invocación de plataforma. De forma predeterminada, el tiempo de ejecución serializa un parámetro de cadena (y campos de un tipo de valor) como para LPStr un método o función de invocación de plataforma. Para obtener más información, consulte Comportamiento de serialización predeterminada.

En la mayoría de los casos, el atributo simplemente identifica el formato de los datos no administrados mediante la UnmanagedType enumeración, como se muestra en la siguiente firma de C#:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)

Algunos UnmanagedType miembros de enumeración requieren información adicional. Por ejemplo, se necesita información adicional cuando UnmanagedType es LPArray. Para obtener una descripción completa de cómo usar este atributo con matrices, consulte Serialización predeterminada para matrices.

El Tlbimp.exe (Importador de biblioteca de tipos) también aplica este atributo a parámetros, campos y valores devueltos para indicar que el tipo de datos de la biblioteca de tipos de entrada no es el tipo predeterminado para el tipo de datos administrado correspondiente. Tlbimp.exe siempre aplica los MarshalAsAttribute tipos a String y Object para mayor claridad, independientemente del tipo especificado en la biblioteca de tipos de entrada.

Note

MarshalAsAttribute no admite la serialización de tipos genéricos.

Constructores

Nombre Description
MarshalAsAttribute(Int16)

Inicializa una nueva instancia de la MarshalAsAttribute clase con el valor especificado UnmanagedType .

MarshalAsAttribute(UnmanagedType)

Inicializa una nueva instancia de la MarshalAsAttribute clase con el miembro de enumeración especificado UnmanagedType .

Campos

Nombre Description
ArraySubType

Especifica el tipo de elemento del no administrado LPArray o ByValArray.

IidParameterIndex

Especifica el índice de parámetros del atributo no administrado iid_is usado por COM.

MarshalCookie

Proporciona información adicional a un serializador personalizado.

MarshalType

Especifica el nombre completo de un serializador personalizado.

MarshalTypeRef

MarshalType Implementa como un tipo.

SafeArraySubType

Indica el tipo de elemento de SafeArray.

SafeArrayUserDefinedSubType

Indica el tipo de elemento definido por el usuario de SafeArray.

SizeConst

Indica el número de elementos de la matriz de longitud fija o el número de caracteres (no bytes) de una cadena que se va a importar.

SizeParamIndex

Indica el parámetro de base cero que contiene el recuento de elementos de matriz, similar a size_is en COM.

Propiedades

Nombre Description
TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)
Value

Obtiene el valor en el UnmanagedType que se serializarán los datos.

Métodos

Nombre Description
Equals(Object)

Devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Cuando se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se reemplaza en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

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

Recupera la información de tipo de un objeto, que se puede usar para obtener la información de tipo de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

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

Proporciona acceso a propiedades y métodos expuestos por un objeto .

(Heredado de Attribute)

Se aplica a

Consulte también