Latest web development tutorials

C # código inseguro

Quando um bloco de código usando a tag modificadorinseguro, C # permite o uso de variável de ponteiro na função.código inseguro ou código não gerenciado é o uso de uma variável deponteirobloco de código.

variável de ponteiro

Um ponteiro é um valor variável do endereço da outra variável, ou seja, o endereço directa do local de memória.Como outras variáveis ​​ou constantes, você deve usar o ponteiro antes de outro armazenamento variável declaração ponteiro de endereço.

A forma geral de uma declaração de variável ponteiro é:

Tipo * var-name;

O que se segue é uma declaração ponteiro válido:

int * ip; / * aponta para um número inteiro * /
double * dp; / * ponteiro para um número de precisão dupla * /
flutuar * fp; / * ponteiro para um float * /
char * ch / * ponteiro para um char * /

O seguinte exemplo ilustra o uso do C # utilizando modificadorinsegura quando o ponteiro:

using System;
namespace UnsafeCodeApplication
{
    Programa de classe
    {
        estática inseguro void Main (string [] args)
        {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "Dados é: {0}", var);
            Console.WriteLine ( "O endereço é: {0}", (int) p);
            Console.ReadKey ();
        }
    }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Dados é: 20
Endereço é: 99215364

Você não pode declarar o método inteiro como código inseguro, apenas uma parte da necessidade de declarar o método como código inseguro. O exemplo a seguir ilustra esse ponto.

Recuperação de valores de dados usando um ponteiro

Você pode usar o métodoToString () dos dados de posição de referência armazenados em um variáveis de ponteiro de recuperação.O exemplo a seguir ilustra esse ponto:

using System;
namespace UnsafeCodeApplication
{
   Programa de classe
   {
      public static void Main ()
      {
         inseguro
         {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "Dados é: {0}", var);
            Console.WriteLine ( "Dados é: {0}", p> ToString ());
            Console.WriteLine ( "O endereço é: {0}", (int) p);
         }
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Dados é: 20
Dados é: 20
Endereço é: 77128984

Passando um ponteiro como um método parâmetro

Você pode passar uma variável de ponteiro como um parâmetro para o método de abordagem. O exemplo a seguir ilustra esse ponto:

using System;
namespace UnsafeCodeApplication
{
   classe TestPointer
   {
      inseguro troca public void (int * p, q int *)
      {
         int temp = * p;
         * = P * Q;
         * Q = temperatura;
      }

      static void inseguro pública Main ()
      {
         TestPointer p = new TestPointer ();
         int var1 = 10;
         int var2 = 20;
         int * x = & var1;
         int * y = & var2;
         
         Console.WriteLine ( "Antes de Swap: var1: {0}, var2: {1}", var1, var2);
         p.swap (x, y);

         Console.WriteLine ( "Depois de Swap: var1: {0}, var2: {1}", var1, var2);
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Antes de Swap: var1: 10, var2: 20
Depois de Swap: var1: 20, var2: 10

Usar ponteiros para acessar os elementos de matriz

Em C #, o nome da matriz e um ponteiro para os dados de matriz com o mesmo tipo de dados é um ponteiro para um diferentes tipos de variáveis. Por exemplo, int * p e int [] p é um tipo diferente. Você pode aumentar a variável ponteiro p, porque não é fixa na memória, mas o endereço da matriz é fixa na memória, para que você não pode adicionar uma matriz p.

Então, se você precisa usar as variáveis de ponteiro para acessar os dados da matriz, como costumamos fazer em C ou C ++ como palavras-chave para usar ponteiro fixofixo.

O exemplo a seguir ilustra esse ponto:

using System;
namespace UnsafeCodeApplication
{
   classe TestPointer
   {
      static void inseguro pública Main ()
      {
         int list [] = {10, 100, 200};
         fixa (int * ptr = list)

         / * Mostrar ponteiro de endereço array * /
         for (int i = 0; i <3; i ++)
         {
            Console.WriteLine ( "Endereço da lista [{0}] = {1}", i, (int) (ptr + i));
            Console.WriteLine ( "Valor da lista [{0}] = {1}", i, * (ptr + i));
         }
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Endereço da lista [0] = 31627168
Valor da lista [0] = 10
Endereço da lista [1] = 31627172
Valor da lista [1] = 100
Endereço da lista [2] = 31627176
Valor da lista [2] = 200

Compilar o código inseguro

Para compilar o código inseguro, você deve mudar para o compilador linha de comando especificar a linha de comando/ inseguro.

Por exemplo, para compilar um programa chamado prog1.cs conter código inseguro, digite o comando na linha de comando:

csc / prog1.cs inseguras

Se você estiver usando Visual Studio IDE, você precisa ativar o código inseguro nas propriedades do projeto.

Faça o seguinte:

  • Pelo nó duplo clique Explorer (Solution Explorer) atributos (propriedades), abra aspropriedades do projeto (Project Properties).
  • Clique na guiaBuild.
  • Selecione a opção"Permitir código inseguro".