다음을 통해 공유


unsafe(C# 참조)

키워드는 unsafe 포인터와 관련된 모든 작업에 필요한 안전하지 않은 컨텍스트를 표시합니다. 자세한 내용은 안전하지 않은 코드 및 포인터를 참조하세요.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

unsafe 형식 또는 멤버 선언에서 한정자를 사용합니다. 형식 또는 멤버의 전체 텍스트 범위는 안전하지 않은 컨텍스트입니다. 예를 들어 다음 메서드는 한정자를 사용하여 unsafe 선언됩니다.

unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
    // Unsafe context: can use pointers here.
}

안전하지 않은 컨텍스트의 범위는 매개 변수 목록에서 메서드의 끝까지 확장되므로 매개 변수 목록에서 포인터를 사용할 수도 있습니다.

unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}

안전하지 않은 블록을 사용하여 이 블록 내에서 안전하지 않은 코드를 사용하도록 설정할 수도 있습니다. 다음은 그 예입니다.

unsafe
{
    // Unsafe context: can use pointers here.
}

안전하지 않은 코드를 컴파일하려면 AllowUnsafeBlocks 컴파일러 옵션을 지정해야 합니다. 공용 언어 런타임은 안전하지 않은 코드를 확인할 수 없습니다.

예시

// compile with: -unsafe
class UnsafeTest
{
    // Unsafe method: takes pointer to int.
    unsafe static void SquarePtrParam(int* p)
    {
        *p *= *p;
    }

    unsafe static void Main()
    {
        int i = 5;
        // Unsafe method: uses address-of operator (&).
        SquarePtrParam(&i);
        Console.WriteLine(i);
    }
}
// Output: 25

C# 언어 사양

자세한 내용은 C# 언어 사양안전하지 않은 코드를 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.

참고하십시오