Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
Visual Studio 2005
Visual C#
C#-Referenz
C#-Schlüsselwörter
Anweisungstypen
 fixed-Anweisung
Alle reduzieren/Alle erweitern Alle reduzieren
Diese Seite ist spezifisch für
Microsoft Visual Studio 2005/.NET Framework 2.0

Andere Versionen stehen ebenfalls zur Verfügung für:
C#-Sprachreferenz
fixed-Anweisung (C#-Referenz)

Die fixed-Anweisung verhindert, dass der Garbage Collector eine bewegliche Variable verschiebt. Die fixed-Anweisung ist nur in einem unsafe-Kontext zulässig. Fixed kann auch zum Erstellen von Puffer fester Größe verwendet werden.

Die fixed-Anweisung legt einen Zeiger auf eine verwaltete Variable fest und "fixiert" diese Variable während der Ausführung von statement. Zeiger auf bewegliche, verwaltete Variablen wären ohne fixed von geringem Nutzen, da Garbage Collection die Variablen auf unvorhersehbare Weise verschieben könnte. Der C#-Compiler erlaubt die Zuweisung von Zeigern auf verwaltete Variablen nur in einer fixed-Anweisung.

// assume class Point { public int x, y; }
// pt is a managed variable, subject to garbage collection.
Point pt = new Point();
// Using fixed allows the address of pt members to be
// taken, and "pins" pt so it isn't relocated.
fixed ( int* p = &pt.x )
{
    *p = 1; 
}

Ein Zeiger kann mit einer Adresse eines Arrays oder einer Zeichenfolge initialisiert werden:

        fixed (int* p = arr) ...  // equivalent to p = &arr[0]
fixed (char* p = str) ... // equivalent to p = &str[0]

Mehrere Zeiger können initialisiert werden, solange sie denselben Typ aufweisen:

fixed (byte* ps = srcarray, pd = dstarray) {...}

Um Zeiger verschiedenen Typs zu initialisieren, schachteln Sie einfach fixed-Anweisungen:

        fixed (int* p1 = &p.x)
{
    fixed (double* p2 = &array[5])
    {
        // Do something with p1 and p2.
    }
}

Nach der Ausführung des Anweisungscodes können beliebige fixierte Variablen wieder gelöst und für Garbage Collection freigegeben werden. Zeigen Sie daher nicht außerhalb der fixed-Anweisung auf solche Variablen.

NoteHinweis

Zeiger, die in fixed-Anweisungen initialisiert wurden, können nicht geändert werden.

Im nicht sicheren Modus kann Speicher auf dem Stapel reserviert werden. Dort unterliegt er nicht Garbage Collection und muss daher nicht fixiert werden. Weitere Informationen finden Sie unter stackalloc.

// statements_fixed.cs
// compile with: /unsafe
using System;

class Point
{ 
    public int x, y; 
}

class FixedTest 
{
    // Unsafe method: takes a pointer to an int.
    unsafe static void SquarePtrParam (int* p) 
    {
        *p *= *p;
    }

    unsafe static void Main() 
    {
        Point pt = new Point();
        pt.x = 5;
        pt.y = 6;
        // Pin pt in place:
        fixed (int* p = &pt.x) 
        {
            SquarePtrParam (p);
        }
        // pt now unpinned
        Console.WriteLine ("{0} {1}", pt.x, pt.y);
    }
}

Ausgabe

25 6

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 18.3 Feste und bewegliche Variablen

  • 18.6 Die fixed-Anweisung

© 2012 Microsoft. Alle Rechte vorbehalten. Nutzungsbedingungen | Markenzeichen | Informationen zur Datensicherheit
Page view tracker