Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
API Mac и iOS используют типы данных, относящиеся к архитектуре, которые всегда являются 32-разрядными на 32-разрядных платформах и 64-разрядных платформах.
Например, Objective-C сопоставляет NSInteger тип int32_t данных с 32-разрядными системами и int64_t 64-разрядными системами.
Чтобы соответствовать этому поведению, в нашем унифицированном API мы заменяем предыдущие варианты использования int (которые в .NET определяются как всегдаSystem.Int32) новым типом данных: System.nint Вы можете считать "n" значением "native", поэтому собственный целочисленный тип платформы.
С этими новыми типами данных один и тот же исходный код компилируется для 32-разрядных и 64-разрядных архитектур в зависимости от флагов компиляции.
Новые типы данных
В следующей таблице показаны изменения в типах данных, которые соответствуют новому 32/64-разрядному миру:
| Собственный тип | 32-разрядный тип резервной копии | 64-разрядный тип резервной копии |
|---|---|---|
System.nint |
System.Int32 (int) |
System.Int64 (long) |
System.nuint |
System.UInt32 (uint) |
System.UInt64 (ulong) |
System.nfloat |
System.Single (float) |
System.Double (double) |
Мы выбрали эти имена, чтобы позволить коду C# выглядеть примерно так же, как и сегодня.
Явные и неявные преобразования
Проектирование новых типов данных позволяет одному исходному файлу C# естественно использовать 32 или 64-разрядное хранилище в зависимости от платформы узла и параметров компиляции.
Это потребовало от нас разработки набора неявных и явных преобразований в типы данных, зависящих от платформы, в типы данных .NET целочисленного и плавающего запятого.
Операторы неявных преобразований предоставляются, если нет возможности потери данных (32-разрядные значения хранятся в 64-разрядном пространстве).
Операторы явного преобразования предоставляются, если существует вероятность потери данных (64-разрядное значение хранится в 32 или потенциально 32 расположении хранилища).
int, uint и float все неявно nintпреобразованы в, nuint и nfloat как 32 бит всегда будут соответствовать 32 или 64 битам.
nint, nuint и nfloat все неявно преобразуются longв , ulong и double как 32 или 64-разрядные значения всегда будут соответствовать 64-разрядному хранилищу.
Необходимо использовать явные преобразования из , nuint а intnfloat также nintв , uintfloat так как собственные типы могут содержать 64 бит хранилища.
Необходимо использовать явные преобразования из long, ulong а doublenintтакже в, nuintnfloat так как собственные типы могут хранить только 32 бита хранилища.
Типы CoreGraphics
Типы данных точки, размера и прямоугольника, используемые в CoreGraphics, используют 32 или 64 бита в зависимости от устройства, на котором они работают. При первоначальной привязке API iOS и Mac мы использовали существующие структуры данных, которые соответствовали размерам платформы узла (типы данных в System.Drawing).
При переходе в Unified необходимо заменить экземпляры System.Drawing их CoreGraphics коллегами, как показано в следующей таблице:
| Старый тип в System.Drawing | Новый тип данных CoreGraphics | Description |
|---|---|---|
RectangleF |
CGRect |
Содержит данные прямоугольника с плавающей запятой. |
SizeF |
CGSize |
Содержит сведения о размере с плавающей запятой (ширина, высота) |
PointF |
CGPoint |
Содержит плавающую точку, сведения о точке (X, Y) |
Старые типы данных используются с плавающей запятой для хранения элементов структур данных, а новый используется System.nfloat.