Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A fixed kulcsszó lehetővé teszi, hogy "rögzítsen" egy helyit a veremen, hogy megakadályozza a szemétgyűjtés során történő gyűjtését vagy áthelyezését. Alacsony szintű programozási forgatókönyvekhez használják.
Szemantika
use ptr = fixed expression
Megjegyzések
Ez kiterjeszti a kifejezések szintaxisát, hogy lehetővé tegye a mutató kinyerését és egy olyan névhez kötését, amely nem gyűjthető vagy helyezhető át a szemétgyűjtés során.
Egy kifejezés mutatója a fixed kulcsszón keresztül van rögzítve, és a kulcsszón keresztül use egy azonosítóhoz van kötve. Ennek szemantikája hasonló a kulcsszón keresztüli use erőforrás-kezeléshez. A mutató rögzített, amíg a hatókörben van, és ha már nincs hatókörben, már nem lesz javítva.
fixed nem használható a kötés környezetén use kívül. Az egérmutatót egy névhez kell kötnie use.
fixed A használatnak egy függvényben vagy metódusban lévő kifejezésen belül kell történnie. Szkriptszintű vagy modulszintű hatókörben nem használható.
Mint minden mutatókód, ez is egy nem biztonságos funkció, és figyelmeztetést ad ki használat esetén.
példa
open Microsoft.FSharp.NativeInterop
type Point = { mutable X: int; mutable Y: int}
let squareWithPointer (p: nativeptr<int>) =
// Dereference the pointer at the 0th address.
let mutable value = NativePtr.get p 0
// Perform some work
value <- value * value
// Set the value in the pointer at the 0th address.
NativePtr.set p 0 value
let pnt = { X = 1; Y = 2 }
printfn $"pnt before - X: %d{pnt.X} Y: %d{pnt.Y}" // prints 1 and 2
// Note that the use of 'fixed' is inside a function.
// You cannot fix a pointer at a script-level or module-level scope.
let doPointerWork() =
use ptr = fixed &pnt.Y
// Square the Y value
squareWithPointer ptr
printfn $"pnt after - X: %d{pnt.X} Y: %d{pnt.Y}" // prints 1 and 4
doPointerWork()