Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le API Mac e iOS usano tipi di dati specifici dell'architettura che sono sempre a 32 bit su piattaforme a 32 bit e 64 bit su piattaforme a 64 bit.
Ad esempio, Objective-C esegue il mapping del NSInteger tipo di dati a nei sistemi a int32_t 32 bit e in sistemi a int64_t 64 bit.
Per trovare la corrispondenza con questo comportamento, nell'API unificata si sostituiscono gli usi precedenti di int (che in .NET è sempre System.Int32definito come ) in un nuovo tipo di dati: System.nint. È possibile considerare "n" come "nativo", quindi il tipo integer nativo della piattaforma.
Con questi nuovi tipi di dati, lo stesso codice sorgente viene compilato per le architetture a 32 bit e a 64 bit, a seconda dei flag di compilazione.
Nuovi tipi di dati
La tabella seguente illustra le modifiche apportate ai tipi di dati in modo che corrispondano a questo nuovo mondo a 32/64 bit:
| Tipo nativo | Tipo di supporto a 32 bit | Tipo di supporto a 64 bit |
|---|---|---|
System.nint |
System.Int32 (int) |
System.Int64 (long) |
System.nuint |
System.UInt32 (uint) |
System.UInt64 (ulong) |
System.nfloat |
System.Single (float) |
System.Double (double) |
Questi nomi sono stati scelti per consentire al codice C# di apparire più o meno allo stesso modo in cui dovrebbe sembrare oggi.
Conversioni implicite ed esplicite
La progettazione dei nuovi tipi di dati è progettata per consentire a un singolo file di origine C# di usare naturalmente l'archiviazione a 32 o 64 bit a seconda della piattaforma host e delle impostazioni di compilazione.
Ciò ci ha richiesto di progettare un set di conversioni implicite ed esplicite in e dai tipi di dati specifici della piattaforma ai tipi di dati integrali e a virgola mobile .NET.
Gli operatori di conversioni implicite vengono forniti quando non esiste alcuna possibilità di perdita di dati (valori a 32 bit archiviati in uno spazio a 64 bit).
Gli operatori di conversioni espliciti vengono forniti quando si verifica una potenziale perdita di dati (il valore a 64 bit viene archiviato in una posizione di archiviazione di 32 o potenzialmente 32).
intuint, e float sono tutti convertibili in modo implicito in ninte nuintnfloat come 32 bit si adattano sempre a 32 o 64 bit.
nintnuint, e nfloat sono tutti convertibili in modo implicito in longulong e double come valori a 32 o 64 bit saranno sempre adatti all'archiviazione a 64 bit.
È necessario usare conversioni esplicite da nintnuint e nfloat in intuint e float poiché i tipi nativi potrebbero contenere 64 bit di archiviazione.
È necessario usare conversioni esplicite da longulong e double in nintnuint e nfloat poiché i tipi nativi potrebbero contenere solo 32 bit di archiviazione.
Tipi CoreGraphics
I tipi di dati point, size e rectangle usati con CoreGraphics usano 32 o 64 bit a seconda del dispositivo in cui sono in esecuzione. Quando originariamente sono state associate le API iOS e Mac, sono state usate strutture di dati esistenti che corrispondono alle dimensioni della piattaforma host (i tipi di dati in System.Drawing).
Quando si passa a Unified, sarà necessario sostituire le istanze di System.Drawing con le rispettive CoreGraphics controparti, come illustrato nella tabella seguente:
| Tipo precedente in System.Drawing | Nuovo tipo di dati CoreGraphics | Descrizione |
|---|---|---|
RectangleF |
CGRect |
Contiene informazioni sul rettangolo a virgola mobile. |
SizeF |
CGSize |
Contiene informazioni sulle dimensioni a virgola mobile (larghezza, altezza) |
PointF |
CGPoint |
Contiene un valore a virgola mobile, informazioni sul punto (X, Y) |
I tipi di dati precedenti usati per archiviare gli elementi delle strutture di dati, mentre quello nuovo usa System.nfloat.