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.
deyimi fixed, çöp toplayıcının taşınabilir bir değişkeni yeniden konumlandırmasını engeller ve bu değişkene bir işaretçi bildirir. Sabit veya sabitlenmiş bir değişkenin adresi, deyiminin yürütülmesi sırasında değişmez. Bildirilen işaretçiyi yalnızca ilgili fixed deyimin içinde kullanabilirsiniz. Bildirilen işaretçi salt okunurdur ve değiştirilemez:
unsafe
{
byte[] bytes = [1, 2, 3];
fixed (byte* pointerToFirst = bytes)
{
Console.WriteLine($"The address of the first array element: {(long)pointerToFirst:X}.");
Console.WriteLine($"The value of the first array element: {*pointerToFirst}.");
}
}
// Output is similar to:
// The address of the first array element: 2173F80B5C8.
// The value of the first array element: 1.
Uyarı
deyimini fixed yalnızca güvenli olmayan bir bağlamda kullanabilirsiniz. Güvenli olmayan bloklar içeren kod, AllowUnsafeBlocks derleyici seçeneğiyle derlenmelidir.
Bildirilen işaretçiyi aşağıdaki gibi başlatabilirsiniz:
Bu makalenin başındaki örnekte gösterildiği gibi bir dizi ile. Başlatılan işaretçi, ilk dizi öğesinin adresini içerir.
Bir değişkenin adresiyle. Aşağıdaki örnekte gösterildiği gibi adres
&işlecini kullanın:unsafe { int[] numbers = [10, 20, 30]; fixed (int* toFirst = &numbers[0], toLast = &numbers[^1]) { Console.WriteLine(toLast - toFirst); // output: 2 } }Nesne alanları, sabitlenebilen taşınabilir değişkenlerin başka bir örneğidir.
Başlatılan işaretçi bir nesne alanının veya bir dizi öğesinin adresini içerdiğinde
fixed, deyimi, atık toplayıcının deyim gövdesinin yürütülmesi sırasında içeren nesne örneğini yeniden konumlandırmaması veya atmaması garanti eder.adlı
GetPinnableReferencebir yöntem uygulayan türün örneğiyle. Bu yöntemrefbir değişken döndürmelidir. .NET bu deseni oluşturur System.Span<T> ve System.ReadOnlySpan<T> kullanır. Aşağıdaki örnekte gösterildiği gibi span örneklerini sabitleyebilirsiniz:unsafe { int[] numbers = [10, 20, 30, 40, 50]; Span<int> interior = numbers.AsSpan()[1..^1]; fixed (int* p = interior) { for (int i = 0; i < interior.Length; i++) { Console.Write(p[i]); } // output: 203040 } }Daha fazla bilgi için bkz Span<T>.GetPinnableReference() . API başvurusu.
Aşağıdaki örnekte gösterildiği gibi bir dize ile:
unsafe { var message = "Hello!"; fixed (char* p = message) { Console.WriteLine(*p); // output: H } }
Atık toplamaya tabi olmayan ve bu nedenle sabitlenmiş olması gerekmeyen yığında bellek ayırabilirsiniz. Bunu yapmak için bir stackalloc ifade kullanın.
fixed bildirmek için anahtar sözcüğünü de kullanabilirsiniz.
C# dil belirtimi
Daha fazla bilgi için C# dil belirtimininaşağıdaki bölümlerine bakın: