共用方式為


iOS 和 macOS 的原生類型

Mac 和 iOS API 會使用 32 位平臺上一律為 32 位的架構特定數據類型,以及 64 位平臺上的 64 位。

例如, Objective-C 將 NSInteger 數據類型對應至 int32_t 32位系統上和 int64_t 64位系統上。

為了符合此行為,我們會在整合 API 上,將先前的用法int取代為新的數據類型:System.Int32System.nint。 您可以將 「n」 視為「原生」,因此平臺的原生整數類型。

使用這些新的數據類型時,會根據編譯旗標,針對32位和64位架構編譯相同的原始碼。

新資料類型

下表顯示數據類型的變更,以符合這個新的 32/64 位世界:

原生類型 32 位備份類型 64 位備份類型
System.nint System.Int32int System.Int64long
System.nuint System.UInt32uint System.UInt64ulong
System.nfloat System.Singlefloat System.Doubledouble

我們選擇這些名稱,讓您的 C# 程式代碼看起來與今天看起來相同。

隱含和明確轉換

新數據類型的設計旨在根據主機平臺和編譯設定,讓單一 C# 來源檔案自然使用 32 或 64 位記憶體。

這需要我們設計一組隱含和明確的轉換,從平臺特定的數據類型到 .NET 整數和浮點數據類型。

當無法遺失數據時,會提供隱含轉換運算符(儲存在64位空間上的32位值)。

當可能會遺失數據時,會提供明確的轉換運算元(64 位值儲存在 32 或可能 32 個儲存位置上)。

intuintfloat 皆可隱含轉換成 nintnuintnfloat 32 位一律會容納 32 或 64 位。

nintnuintnfloat 皆可隱含轉換成 longulongdouble 32 或 64 位值一律會容納在 64 位記憶體中。

您必須使用 從nintnfloatnuintint的明確轉換,uint而且float因為原生類型可能會保存 64 位的記憶體。

您必須使用、 longulongdoublenint的明確轉換,nfloatnuint因為原生類型可能只能保存 32 位的記憶體。

CoreGraphics 類型

與 CoreGraphics 搭配使用的點、大小和矩形數據類型會根據執行所在裝置使用 32 或 64 位。 當我們最初系結 iOS 和 Mac API 時,我們使用與主機平臺大小相符的現有數據結構(中的 System.Drawing數據類型)。

移至 Unified 時,您必須將 的 System.Drawing 實體取代為其 CoreGraphics 對應專案,如下表所示:

System.Drawing 中的舊類型 新的數據類型 CoreGraphics 描述
RectangleF CGRect 保存浮點矩形資訊。
SizeF CGSize 儲存浮點大小資訊(寬度、高度)
PointF CGPoint 儲存浮點、點資訊 (X、Y)

舊資料類型會使用浮點數來儲存資料結構的元素,而新的資料類型則使用 System.nfloat