Tipi copiabili e non copiabili

La maggior parte dei tipi di dati ha una rappresentazione comune sia nella memoria gestita che in quella non gestita e non richiede quindi una gestione particolare tramite il gestore di marshalling di interoperabilità. Questi tipi sono definiti copiabili, in quanto non richiedono la conversione quando vengono passati tra codice gestito e non gestito.

I tipi dello spazio dei nomi System elencati di seguito sono copiabili:

Anche i seguenti tipi complessi sono copiabili:

  • Matrici unidimensionali di tipi copiabili, come una matrice di valori integer. Un tipo contenente una matrice variabile di tipi copiabili tuttavia non è copiabile.

  • Tipi di valore formattati contenenti solo tipi copiabili, se sottoposti a marshalling come tipi formattati.

I riferimenti a oggetti non sono copiabili, incluse le matrici di riferimenti a oggetti, i quali invece sono copiabili. È ad esempio possibile definire una struttura copiabile, ma non un tipo copiabile contenente una matrice di riferimenti a tali strutture.

Per ragioni di ottimizzazione, le matrici di tipi e classi copiabili contenenti solo membri copiabili vengono bloccate e non copiate durante il marshalling. Quando il chiamante e il chiamato si trovano nello stesso apartment, può sembrare che il marshalling di questi tipi venga eseguito come parametri In/Out. In realtà, il marshalling di questi tipi viene eseguito come parametri In ed è necessario applicare gli attributi InAttribute e OutAttribute se si desidera eseguire il marshalling dell'argomento come parametro In/Out.

I tipi non copiabili hanno rappresentazioni diverse o ambigue nei linguaggi gestiti e non gestiti. Questi tipi possono richiedere la conversione quando si esegue il marshalling tra codice gestito e non gestito. Le stringhe gestite, ad esempio, sono tipi non copiabili, in quanto possono avere più rappresentazioni non gestite, alcune delle quali richiedono la conversione.

Nella tabella riportata di seguito sono elencati tipi non copiabili dello spazio dei nomi System. Anche i delegati, ossia le strutture di dati che fanno riferimento a un metodo statico o a un'istanza di classe, non sono copiabili.

Tipo non copiabile Descrizione

System.Array

Viene convertito in una matrice di tipo C o in SAFEARRAY.

System.Boolean

Viene convertito in un valore a 1, 2 o 4 byte con true pari a 1 o -1.

System.Char

Viene convertito in un carattere Unicode o ANSI.

System.Class

Viene convertito in un'interfaccia di classe.

System.Object

Viene convertito in un variant o in un'interfaccia.

System.Mdarray

Viene convertito in una matrice di tipo C o in SAFEARRAY.

System.String

Viene convertito in una stringa che termina con un riferimento null (Nothing in Visual Basic) o un BSTR.

System.Valuetype

Viene convertito in una struttura con un layout a memoria fissa.

System.Szarray

Viene convertito in una matrice di tipo C o in SAFEARRAY.

I tipi di classe e oggetto sono supportati solo dall'interoperabilità COM. Per i tipi corrispondenti in Visual Basic 2005, C# e C++, vedere Introduzione alla libreria di classi .NET Framework.

Vedere anche

Altre risorse

Comportamento di marshalling predefinito