IntPtr.Subtraction(IntPtr, Int32) Operátor
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odečte posun od podepsaného celého čísla.
public:
static IntPtr operator -(IntPtr pointer, int offset);
public static IntPtr operator - (IntPtr pointer, int offset);
static member ( - ) : nativeint * int -> nativeint
Public Shared Operator - (pointer As IntPtr, offset As Integer) As IntPtr
Parametry
- pointer
-
IntPtr
nativeint
Celé číslo podepsaného pro odečtení posunu od.
- offset
- Int32
Posun k odečtení.
Návraty
-
IntPtr
nativeint
Nové podepsané celé číslo, které odráží odčítání od offset
pointer
.
Poznámky
Metoda Subtraction definuje operaci odčítání pro IntPtr objekty. Povolí kód, například následující.
int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
unsafe {
fixed(int* parr = &arr[arr.GetUpperBound(0)])
{
IntPtr ptr = new IntPtr(parr);
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
{
IntPtr newPtr = ptr - ctr * sizeof(Int32);
Console.Write("{0} ", Marshal.ReadInt32(newPtr));
}
}
}
// The example displays the following output:
// 20 18 16 14 12 10 8 6 4 2
#nowarn "9"
open System.Runtime.InteropServices
open FSharp.NativeInterop
[<EntryPoint>]
let main _ =
let arr =
[| 2; 4; 6; 8; 10; 12; 14; 16; 18; 20 |]
use parr = fixed &arr[arr.GetUpperBound 0]
let ptr = NativePtr.toNativeInt parr
for i = 0 to arr.GetUpperBound 0 do
let newPtr = ptr - nativeint i * nativeint sizeof<int>
printf $"{Marshal.ReadInt32 newPtr} "
0
// The example displays the following output:
// 20 18 16 14 12 10 8 6 4 2
Dim arr() As Integer = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }
Dim ptr As IntPtr = Marshal.UnsafeAddrOfPinnedArrayElement(arr, arr.GetUpperBound(0))
For ctr As Integer= 0 To arr.GetUpperBound(0)
Dim newPtr As IntPtr = ptr - ctr * Len(arr(0))
Console.Write("{0} ", Marshal.ReadInt32(newPtr))
Next
Jazyky, které nepodporují vlastní operátory, mohou místo toho metodu Subtract volat.
Operace odčítání nevyvolá výjimku, pokud je výsledek příliš malý, aby představoval jako celé číslo podepsaného v procesu provádění. Místo toho se provádí v nezaškrtnutém kontextu.
V jazyce C# od verze 11 a při cílení na modul runtime .NET 7 nebo novější je toto rozhraní API přístupné jenom prostřednictvím reflexe. Operátor odčítání je přímo rozpoznán jazykem a bude dodržovat normální chování jazyka pro odčítání operací, včetně přetečení v checked
kontextu, pokud je výsledek příliš malý, aby představoval.
Ekvivalentní metoda tohoto operátoru je IntPtr.Subtract(IntPtr, Int32)