Latest web development tutorials

C # небезопасный код

Когда блок кода с использованиемнебезопасного модификатора тег, C # позволяет использовать переменную - указатель в функции.Небезопасного кода или неуправляемого кода является использование переменной кодового блокауказателя.

переменная указатель

Указатель является переменной значение адреса другой переменной, а именно прямой адрес ячейки памяти.Как и другие переменные или константы, вы должны использовать указатель перед тем другой переменной для хранения объявлении указателя адреса.

Общая форма декларации переменной указателя:

VAR-имя типа *;

Ниже приводится действительная декларация указателя:

INT * IP; / * указывает на целое число * /
двойной * дп; / * указатель на число двойной точности * /
плавать * FP; / * указатель на флоат * /
символ * ч / * указатель на символ * /

Следующий пример иллюстрирует использование C # с использованиемнебезопасного модификатора , когда указатель:

с помощью системы;
Пространство имен UnsafeCodeApplication
{
    класс программы
    {
        Статическая небезопасным недействительным Main (строка [] агдз)
        {
            INT переменная = 20;
            INT * р = & вар;
            Console.WriteLine ( "Данные: {0}", переменная);
            Console.WriteLine ( "Адрес: {0}", (INT) р);
            Console.ReadKey ();
        }
    }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Данные: 20
Адрес: 99215364

Вы не можете объявить весь метод как небезопасный код, только часть нужно объявить метод как небезопасный код. Следующий пример иллюстрирует этот момент.

Получение значений данных, используя указатель

Вы можете использовать методToString () из данных опорного положения , хранящимися в извлекаемой указателях переменных.Следующий пример иллюстрирует этот момент:

с помощью системы;
Пространство имен UnsafeCodeApplication
{
   класс программы
   {
      государственной статической силы Main ()
      {
         небезопасный
         {
            INT переменная = 20;
            INT * р = & вар;
            Console.WriteLine ( "Данные: {0}", переменная);
            Console.WriteLine ( "Данные: {0}", п> ToString ());
            Console.WriteLine ( "Адрес: {0}", (INT) р);
         }
         Console.ReadKey ();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Данные: 20
Данные: 20
Адрес: 77128984

Передача указателя в качестве метода параметра

Вы можете передать переменную указатель в качестве параметра метода подхода. Следующий пример иллюстрирует этот момент:

с помощью системы;
Пространство имен UnsafeCodeApplication
{
   класс TestPointer
   {
      общественное небезопасным недействительным своп (INT * р, Int * д)
      {
         INT Temp = * р;
         * Р = * д;
         * Q = темп;
      }

      общественного небезопасным статической силы Main ()
      {
         TestPointer р = новый TestPointer ();
         INT var1 = 10;
         INT var2 = 20;
         INT * х = & var1;
         INT * у = & var2;
         
         Console.WriteLine ( "Перед свопа: var1: {0}, var2: {1}", var1, var2);
         p.swap (х, у);

         Console.WriteLine ( "После того, как свопа: var1: {0}, var2: {1}", var1, var2);
         Console.ReadKey ();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Перед тем как замена: var1: 10, var2: 20
После того, как Swap: var1: 20, var2: 10

Используйте указатели для доступа к элементам массива

В C #, имя массива и указатель на массив данных с тем же типом данных является указателем на различные типы переменных. Например, Int * р и Int [] р это другой тип. Вы можете увеличить переменную указатель р, поскольку она не фиксируется в памяти, но адрес массива фиксируется в памяти, так что вы не можете добавить массив р.

Так что , если вам нужно использовать переменные - указатели для доступа к данным массива, как мы обычно делаем в C или C ++ в качестве ключевых слов , чтобы использоватьфиксированный фиксированный указатель.

Следующий пример иллюстрирует этот момент:

с помощью системы;
Пространство имен UnsafeCodeApplication
{
   класс TestPointer
   {
      общественного небезопасным статической силы Main ()
      {
         INT [] = {список 10, 100, 200};
         фиксированная (INT * PTR = список)

         / * Дисплей адрес указателя массива * /
         для (INT I = 0; I <3; я ++)
         {
            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

Если вы используете Visual Studio IDE, Вам необходимо включить небезопасный код в свойствах проекта.

Выполните следующие действия:

  • С помощью двойного щелчка Explorer (Обозреватель решений) атрибуты (свойства) узла, откройтесвойства проекта (свойства проекта).
  • Перейдите на вкладкуBuild.
  • Выберите опцию"Разрешить небезопасный код".