2009-02-27 8 views

Antwort

16

Die feste Anweisung wird im Zusammenhang mit der unsafe modifier verwendet. Unsicher erklärt, dass Sie Zeigerarithmetik verwenden (zB: API-Aufruf auf niedriger Ebene), die außerhalb normaler C# -Operationen liegt. Die fixed-Anweisung wird verwendet, um den Speicher an Ort und Stelle zu sperren, damit der Garbage Collector ihn nicht neu zuordnet, während er noch verwendet wird. Sie können die feste Anweisung nicht außerhalb des unsicheren Kontexts verwenden.

Beispiel

public static void PointyMethod(char[] array) 
{ 
    unsafe 
    { 
     fixed (char *p = array) 
     { 
      for (int i=0; i<array.Length; i++) 
      { 
       System.Console.Write(*(p+i)); 
      } 
     } 
    } 
} 
+0

Wundert mich, warum es explizite Notwendigkeit angeben, dass der Codeblock/Verfahren unsicher ist, muss der Compiler es wissen, wann es die feste Aussage sieht. – arul

+0

True, aber ich glaube, es kann nicht den Kontext, dh Methoden, Typ oder Code-Block schließen. Aber das ist nur eine Vermutung. – cgreeno

+0

Der Compiler könnte die feste Anweisung automatisch mit der unsicheren Anweisung umbrechen, wenn sie einen Wert hat. Vielleicht gibt es noch andere Vorgänge unter der Haube des unsicheren Codes, die dazu führen könnten, dass generischer 'sicherer' Code langsam läuft, wer weiß. – arul