Latest web development tutorials

C #을 안전하지 않은 코드

불안전 개질제 태그를 사용하여 코드의 블록은, C 번호는 함수 포인터 변수의 사용을 허용하는 경우.안전하지 않은 코드 또는 비 관리 코드는 코드 블록포인터 변수의사용이다.

포인터 변수

포인터는 다른 변수의 메모리 위치, 즉, 직접 어드레스의 어드레스의 변수 값이다.다른 변수 나 상수처럼, 당신은 다른 변수에 저장 주소 포인터를 선언하기 전에 포인터를 사용해야합니다.

포인터 변수 선언의 일반적인 형태는 다음과 같다 :

형 * var에 이름;

다음은 유효한 포인터의 선언입니다 :

INT * IP / * 포인트 정수로 * /
두 번 * DP, 배정 밀도 번호 / * 포인터 * /
* FP 플로트; / * 포인터를 플로트 *에 /
숯불에 문자 * 채널 / * 포인터 * /

다음 예는안전하지 않은 수정을 사용하여 C #을 사용하는 방법을 보여줍니다 때 포인터 :

시스템을 이용하여;
네임 스페이스 UnsafeCodeApplication
{
    클래스 프로그램
    {
        정적 안전하지 않은 무효 메인 (문자열 []에 args)
        {
            INT var에 = 20;
            INT * P = VAR;
            Console.WriteLine ( "데이터는 다음과 같습니다 {0}", VAR);
            Console.WriteLine (이하 "주소는 다음과 같습니다 {0}", (int)를 P);
            Console.ReadKey ();
        }
    }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

데이터는 다음과 같습니다 (20)
주소 : 99215364

사용자는 안전하지 않은 코드, 안전하지 않은 코드의 방법을 선언 할 필요성의 일부로서 전체 방법을 선언 할 수있다. 다음의 예는이 점을 보여줍니다.

포인터를 사용하여 데이터 값을 가져

사용자는, 검색 포인터 변수에 저장된 기준 위치 데이터toString () 메서드를 사용할 수있다.다음의 예는이 점을 보여

시스템을 이용하여;
네임 스페이스 UnsafeCodeApplication
{
   클래스 프로그램
   {
      공공 정적 무효 메인 ()
      {
         위험한
         {
            INT var에 = 20;
            INT * P = VAR;
            Console.WriteLine ( "데이터는 다음과 같습니다 {0}", VAR);
            Console.WriteLine는 ( "데이터는 다음과 같습니다 {0}", P-> ToString ());
            Console.WriteLine (이하 "주소는 다음과 같습니다 {0}", (int)를 P);
         }
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

데이터는 다음과 같습니다 (20)
데이터는 다음과 같습니다 (20)
주소 : 77128984

파라미터 방식으로 포인터를 전달

당신은 접근 방법에 대한 매개 변수로 포인터 변수를 전달할 수 있습니다. 다음의 예는이 점을 보여

시스템을 이용하여;
네임 스페이스 UnsafeCodeApplication
{
   클래스 TestPointer
   {
      공공 안전하지 않은 무효 스왑 (INT의 * p를, INT의 * Q)
      {
         INT 온도 = * 피;
         * P = Q *;
         * Q = 임시;
      }

      공공 안전하지 않은 정적 무효 메인 ()
      {
         TestPointer P는 = 새로운 TestPointer ();
         INT VAR1 = 10;
         INT VAR2 = 20;
         INT * X = VAR1;
         INT * Y = VAR2;
         
         Console.WriteLine ( "스왑 전 : VAR1 : {0}, VAR2 : {1}", VAR1, VAR2);
         p.swap (X, Y);

         Console.WriteLine ( "스왑 후 : VAR1 : {0}, VAR2 : {1}", VAR1, VAR2);
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

VAR1 : 스왑 전에 10 VAR2 : 20
VAR1 : 스왑 후 20 VAR2 : 10

배열 요소에 액세스 할 수 포인터를 사용하여

C #으로 배열 이름과 같은 데이터 타입으로 배열 된 데이터에 대한 포인터가 다른 변수 유형에 대한 포인터이다. 예를 들어, INT의 * p와 int로는 [] p는 다른 유형입니다. 이 메모리에 고정되어 있지 않기 때문에 당신은 포인터 변수 p를 증가 할 수 있지만, 배열의 주소는 메모리에 고정되어 있으므로 배열 페이지를 추가 할 수 없습니다.

그래서, 키워드고정형 포인터를 사용하는 우리가 일반적으로 C 또는 C ++에서와 같이, 배열 데이터에 액세스하는 포인터 변수를 사용해야하는 경우.

다음의 예는이 점을 보여

시스템을 이용하여;
네임 스페이스 UnsafeCodeApplication
{
   클래스 TestPointer
   {
      공공 안전하지 않은 정적 무효 메인 ()
      {
         INT []리스트 = {10, 100, 200};
         고정 (INT * PTR = 목록)

         / * 디스플레이 포인터 배열의 주소 * /
         위해 (내가 3 <나는 = 0 int로 내가 ++)
         {
            Console.WriteLine ( "목록의 주소 [{0}] = {1}", 난, (int)를 PTR (+ I));
            Console.WriteLine ( "목록의 값 [{0}] = {1}", 난, * (PTR + I));
         }
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

목록의 주소 [0] = 31627168
목록의 값은 [0] (10) =
목록의 주소 [1] = 31627172
목록의 값 [1] = 100
목록의 주소 [2] = 31627176
목록의 값 [2] = 200

안전하지 않은 코드를 컴파일

안전하지 않은 코드를 컴파일하려면, 당신은/ 안전하지 않은 명령 줄을 지정하는 명령 줄 컴파일러로 전환해야합니다.

예를 들어,라는 prog1.cs가 안전하지 않은 코드를 포함 명령 줄에서 명령을 입력하는 프로그램을 컴파일합니다 :

CSC / 안전하지 않은 prog1.cs

당신은 비주얼 스튜디오 IDE를 사용하는 경우, 당신은 프로젝트 속성에서 안전하지 않은 코드를 사용하도록 설정해야합니다.

다음과 같이 진행하십시오 :

  • 두 번 클릭하여 탐색기 (솔루션 탐색기)의 속성 (등록 정보) 노드,프로젝트 속성 (프로젝트 속성)을 엽니 다.
  • 빌드 탭을 클릭합니다.
  • "안전하지 않은 코드 허용"옵션을선택합니다.