Condividi tramite


Tipi copiabili e non copiabili

Aggiornamento: novembre 2007

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 denominati tipi 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 (e classi se sottoposti a marshalling come tipi formattati). Per ulteriori informazioni sui tipi di valore formattati, vedere Marshalling predefinito per i tipi di valore.

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.

Alcuni tipi di dati gestiti richiedono una rappresentazione diversa in un ambiente non gestito. Questi tipi di dati non copiabili devono essere convertiti in un formato di cui è possibile eseguire il marshalling. Le stringhe gestite, ad esempio, sono tipi non copiabili perché devono essere convertite in oggetti stringa prima di poter eseguire il marshalling.

Nella tabella riportata di seguito sono elencati i 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 o in 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 Cenni preliminari sulla libreria di classi .NET Framework.

Vedere anche

Altre risorse

Comportamento di marshalling predefinito