Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
fixed anahtar sözcüğü, atık toplama sırasında toplanmasını veya taşınmasını önlemek için bir yerel kümeyi yığına "sabitlemenizi" sağlar. Düşük düzeyli programlama senaryoları için kullanılır.
Sözdizimi
use ptr = fixed expression
Açıklamalar
Bu, ifadelerin söz dizimini genişleterek bir işaretçi ayıklamaya ve çöp toplama sırasında toplanması veya taşınması engellenen bir ada bağlamaya olanak tanır.
bir ifadenin işaretçisi anahtar sözcük aracılığıyla fixed sabittir ve anahtar sözcük aracılığıyla bir tanımlayıcıya use bağlıdır. Bunun semantiği anahtar sözcüğü aracılığıyla kaynak yönetimine use benzer. İşaretçi kapsam dışındayken sabittir ve kapsam dışında olduğunda artık düzeltilmemiştir.
fixed bağlama bağlamı use dışında kullanılamaz. İşaretçiyi ile usebir ada bağlamanız gerekir.
kullanımı, fixed bir işlev veya yöntemdeki bir ifade içinde gerçekleşmelidir. Betik düzeyinde veya modül düzeyinde bir kapsamda kullanılamaz.
Tüm işaretçi kodlarında olduğu gibi bu da güvenli olmayan bir özelliktir ve kullanıldığında bir uyarı gösterir.
Örnek
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()