Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
-instruktionen fixed förhindrar att skräpinsamlaren flyttar en flyttbar variabel och deklarerar en pekare till variabeln. Adressen till en fast eller fäst variabel ändras inte under körningen av -instruktionen. Du kan endast använda den deklarerade pekaren i motsvarande fixed instruktion. Den deklarerade pekaren är skrivskyddad och kan inte ändras:
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.
Anmärkning
Du kan endast använda -instruktionen fixed i en osäker kontext. Koden som innehåller osäkra block måste kompileras med kompilatoralternativet AllowUnsafeBlocks.
Du kan initiera den deklarerade pekaren på följande sätt:
- Med en matris, som exemplet i början av den här artikeln visar. Den initierade pekaren innehåller adressen till det första matriselementet. 
- Med en adress för en variabel. Använd operatorns - &adress, som följande exempel visar:- unsafe { int[] numbers = [10, 20, 30]; fixed (int* toFirst = &numbers[0], toLast = &numbers[^1]) { Console.WriteLine(toLast - toFirst); // output: 2 } }- Objektfält är ett annat exempel på flyttbara variabler som kan fästas. - När den initierade pekaren innehåller adressen för ett objektfält eller ett matriselement garanterar instruktionen - fixedatt skräpinsamlaren inte flyttar eller tar bort den innehållande objektinstansen under körningen av instruktionstexten.
- Med instansen av typen som implementerar en metod med namnet - GetPinnableReference. Den metoden måste returnera en- refvariabel av en ohanterad typ. .NET-typerna System.Span<T> och System.ReadOnlySpan<T> använd det här mönstret. Du kan fästa span-instanser, som följande exempel visar:- 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 } }- Mer information finns i API-referensen Span<T>.GetPinnableReference() . 
- Med en sträng, som följande exempel visar: - unsafe { var message = "Hello!"; fixed (char* p = message) { Console.WriteLine(*p); // output: H } }
- Med en buffert med fast storlek. 
Du kan allokera minne på stacken, där den inte omfattas av skräpinsamling och därför inte behöver fästas. Om du vill göra det använder du ett stackalloc uttryck.
Du kan också använda nyckelordet fixed för att deklarera en buffert med fast storlek.
Språkspecifikation för C#
Mer information finns i följande avsnitt i C#-språkspecifikationen: