MarshalAsAttribute Classe

Definizione

Indica come eseguire il marshalling dei dati tra codice gestito e non gestito.

[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
Ereditarietà
MarshalAsAttribute
Attributi

Esempio

L'esempio seguente applica l'oggetto MarshalAsAttribute a un campo, un parametro del metodo e un valore restituito dal metodo in un tipo gestito.

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)
    {  }
}

L'esempio seguente applica l'attributo MarshalAsAttribute a una proprietà:

decimal _money;   

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

Commenti

È possibile applicare questo attributo a parametri, campi o valori restituiti.

Questo attributo è facoltativo, poiché ogni tipo di dati ha un comportamento di marshalling predefinito. Questo attributo è necessario solo quando un determinato tipo può essere eseguito il marshalling su più tipi. Ad esempio, è possibile eseguire il marshalling di una stringa per il codice non gestito come LPStr, un LPWStr, o LPTStrun BStr. Per impostazione predefinita, Common Language Runtime esegue il marshalling di un parametro stringa come metodo BStr COM. È possibile applicare l'attributo MarshalAsAttribute a un singolo campo o parametro per causare il marshalling di tale stringa specifica come invece LPStr di un BStroggetto . L 'Tlbexp.exe (Type Library Exporter) passa le preferenze di marshalling al common language runtime.

Alcuni parametri e valori restituiti hanno un comportamento di marshalling predefinito diverso quando viene usato con l'interoperabilità COM o l'richiamare della piattaforma. Per impostazione predefinita, il runtime esegue il marshalling di un parametro stringa (e campi in un tipo di valore) come a un metodo o una LPStr funzione di richiamare la piattaforma. Per altre informazioni, vedere Comportamento di marshalling predefinito.

Nella maggior parte dei casi, l'attributo identifica semplicemente il formato dei dati non gestiti usando l'enumerazione UnmanagedType , come illustrato nella firma C# seguente:

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

Alcuni UnmanagedType membri di enumerazione richiedono informazioni aggiuntive. Ad esempio, sono necessarie informazioni aggiuntive quando è UnmanagedTypeLPArray. Per una descrizione completa di come usare questo attributo con matrici, vedere Marshalling predefinito per matrici.

La Tlbimp.exe (Importazione libreria tipi) applica anche questo attributo ai parametri, ai campi e ai valori restituiti per indicare che il tipo di dati nella libreria dei tipi di input non è il tipo predefinito per il tipo di dati gestito corrispondente. Tlbimp.exe applica sempre i MarshalAsAttribute tipi a String e Object per chiarezza, indipendentemente dal tipo specificato nella libreria dei tipi di input.

Nota

Non MarshalAsAttribute supporta il marshalling di tipi generici.

Costruttori

MarshalAsAttribute(Int16)

Inizializza una nuova istanza della classe MarshalAsAttribute con il valore UnmanagedType specificato.

MarshalAsAttribute(UnmanagedType)

Inizializza una nuova istanza della classe MarshalAsAttribute con il membro di enumerazione UnmanagedType specificato.

Campi

ArraySubType

Specifica il tipo di elemento dell'oggetto LPArray o ByValArray non gestito.

IidParameterIndex

Specifica l'indice di parametro dell'attributo iid_is non gestito utilizzato da COM.

MarshalCookie

Fornisce informazioni aggiuntive a un gestore di marshalling personalizzato.

MarshalType

Specifica il nome completo di un gestore di marshalling personalizzato.

MarshalTypeRef

Implementa MarshalType come tipo.

SafeArraySubType

Indica il tipo di elemento di SafeArray .

SafeArrayUserDefinedSubType

Indica il tipo di elemento di SafeArray definito dall'utente.

SizeConst

Indica il numero di elementi nella matrice a lunghezza fissa o il numero di caratteri (non byte) in una stringa da importare.

SizeParamIndex

Indica il parametro in base zero che contiene il numero di elementi della matrice, come size_is in COM.

Proprietà

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)
Value

Ottiene il valore UnmanagedType in base al quale viene eseguito il marshalling dei dati.

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Prodotto Versioni
.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

Vedi anche