Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejsy API dla komputerów Mac i iOS używają typów danych specyficznych dla architektury, które są zawsze 32 bitami na platformach 32-bitowych i 64 bitach na platformach 64-bitowych.
Na przykład Objective-C mapuje NSInteger typ danych na int32_t systemy 32-bitowe i int64_t na systemy 64-bitowe.
Aby dopasować to zachowanie, w naszym ujednoliconym interfejsie API zastępujemy poprzednie zastosowania int (które na platformie .NET są zdefiniowane jako zawsze System.Int32) na nowy typ danych: System.nint. Możesz traktować "n" jako "natywny", więc natywny typ liczby całkowitej platformy.
W przypadku tych nowych typów danych ten sam kod źródłowy jest kompilowany dla architektur 32-bitowych i 64-bitowych, w zależności od flag kompilacji.
Nowe typy danych
W poniższej tabeli przedstawiono zmiany w typach danych zgodne z tym nowym światem 32/64-bitowym:
| Typ natywny | Typ kopii zapasowej 32-bitowej | Typ kopii zapasowej 64-bitowej |
|---|---|---|
System.nint |
System.Int32 (int) |
System.Int64 (long) |
System.nuint |
System.UInt32 (uint) |
System.UInt64 (ulong) |
System.nfloat |
System.Single (float) |
System.Double (double) |
Wybraliśmy te nazwy, aby umożliwić kodowi języka C# wygląd mniej więcej w taki sam sposób, jak dzisiaj.
Konwersje jawne i niejawne
Projekt nowych typów danych ma na celu umożliwienie naturalnego używania 32 lub 64-bitowego magazynu w jednym pliku źródłowym języka C# w zależności od platformy hosta i ustawień kompilacji.
Wymaga to od nas zaprojektowania zestawu niejawnych i jawnych konwersji do i z typów danych specyficznych dla platformy do typu danych całkowitych i zmiennoprzecinkowych platformy .NET.
Operatory konwersji niejawnych są udostępniane, gdy nie ma możliwości utraty danych (wartości 32-bitowe przechowywane na 64-bitowym miejscu).
Operatory konwersji jawnych są udostępniane, gdy istnieje możliwość utraty danych (wartość 64-bitowa jest przechowywana w lokalizacji magazynu 32 lub potencjalnie 32).
int, uint i float są niejawnie konwertowane na nint, nuint a nfloat ponieważ 32 bity zawsze mieszczą się w 32 lub 64 bitach.
ninti nuintnfloat są niejawnie konwertowane na long, ulong a double jako wartości 32 lub 64-bitowe będą zawsze mieścić się w 64-bitowym magazynie.
Należy użyć jawnych konwersji z nint, nuint i nfloat do int, uint a float ponieważ typy natywne mogą przechowywać 64 bity magazynu.
Należy użyć jawnych konwersji z long, ulong i double do nint, nuint a nfloat ponieważ typy natywne mogą być w stanie przechowywać tylko 32 bity magazynu.
Typy CoreGraphics
Typy danych punktów, rozmiarów i prostokątów, które są używane w usłudze CoreGraphics, używają 32 lub 64 bitów w zależności od urządzenia, na którym są uruchomione. Kiedy pierwotnie powiązaliśmy interfejsy API systemów iOS i Mac, użyliśmy istniejących struktur danych, które były zgodne z rozmiarami platformy hosta (typy danych w System.Drawingprogramie ).
Podczas przechodzenia do programu Unified należy zastąpić wystąpienia ich CoreGraphics odpowiednikamiSystem.Drawing, jak pokazano w poniższej tabeli:
| Stary typ w pliku System.Drawing | Nowy typ danych CoreGraphics | opis |
|---|---|---|
RectangleF |
CGRect |
Przechowuje informacje o prostokątach zmiennoprzecinkowych. |
SizeF |
CGSize |
Zawiera informacje o rozmiarze zmiennoprzecinkowe (szerokość, wysokość) |
PointF |
CGPoint |
Przechowuje zmiennoprzecinkę, informacje o punkcie (X, Y) |
Stare typy danych używały zmiennoprzecinkowych do przechowywania elementów struktur danych, podczas gdy nowy używa metody System.nfloat.