2009-02-27 9 views

答えて

16

固定文は、unsafe modifierのコンテキストで使用されます。 Unsafeは、通常のC#演算の外にあるポインタ演算(たとえば、低レベルAPI呼び出し)を使用すると宣言します。 fixedステートメントは、メモリをロックするために使用されるため、ガベージコレクタはまだ使用中にメモリを再割り当てしません。あなたは、安全でないという文脈の外では固定ステートメントを使うことはできません。それは、固定の文を見たとき、コンパイラはそれを知っている必要があり、コードブロック/メソッドが安全であることを指定するには、明示的な必要がありますなぜ

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

は私が思ってしまいます。 – arul

+0

trueですが、コンテキスト、つまりメソッド、型、コードブロックを推論することはできません。しかし、それはちょうど推測です。 – cgreeno

+0

コンパイラは、fixedステートメントをunsafeステートメントで自動的にラップできます(値が任意の場合)。たぶん、安全でないコードのいくつかの他の操作があります。これは、一般的な「安全な」コードをゆっくりと実行させるかもしれません。 – arul

関連する問題