アンセーフ コードとポインター (C# プログラミング ガイド)Unsafe code and pointers (C# Programming Guide)

タイプ セーフとセキュリティを維持するために、既定では C# はポインター演算をサポートしません。To maintain type safety and security, C# does not support pointer arithmetic, by default. ただし、unsafe キーワードを使用すれば、ポインターを使用できる unsafe コンテキストを定義できます。However, by using the unsafe keyword, you can define an unsafe context in which pointers can be used. ポインターについて詳しくは、ポインター型に関するページをご覧ください。For more information about pointers, see Pointer types.

注意

共通言語ランタイム (CLR) では、アンセーフ コードは検査できないコードと呼ばれます。In the common language runtime (CLR), unsafe code is referred to as unverifiable code. C# のアンセーフ コードは、必ずしも危険ではありません。ただ、CLR で安全性を検査できないコードであるというだけです。Unsafe code in C# is not necessarily dangerous; it is just code whose safety cannot be verified by the CLR. そのため CLR は、完全に信頼できるアセンブリ内にある場合にのみ、アンセーフ コードを実行します。The CLR will therefore only execute unsafe code if it is in a fully trusted assembly. アンセーフ コードを使用する場合は、セキュリティ上のリスクやポインター エラーが発生しないように注意してください。If you use unsafe code, it is your responsibility to ensure that your code does not introduce security risks or pointer errors.

アンセーフ コードの概要Unsafe code overview

アンセーフ コードには次の特徴があります。Unsafe code has the following properties:

  • メソッド、型、およびコード ブロックをアンセーフとして定義できます。Methods, types, and code blocks can be defined as unsafe.

  • アンセーフ コードでアプリケーションのパフォーマンスが向上することがあります。これは、配列のバインド チェックが削除されるためです。In some cases, unsafe code may increase an application's performance by removing array bounds checks.

  • アンセーフ コードは、ポインターを必要とするネイティブ関数を呼び出すときに必要です。Unsafe code is required when you call native functions that require pointers.

  • アンセーフ コードを使用すると、セキュリティと安定性の面でリスクが生じます。Using unsafe code introduces security and stability risks.

  • unsafe ブロックを含むコードは、-unsafe コンパイラ オプションを使ってコンパイルする必要があります。The code that contains unsafe blocks must be compiled with the -unsafe compiler option.

詳細については次を参照してください:For more information, see:

C# 言語仕様C# language specification

詳細については、C# 言語仕様アンセーフ コードに関するトピックを参照してください。For more information, see the Unsafe code topic of the C# language specification.

関連項目See also