Latest web development tutorials

C # codice non sicuro

Quando un blocco di codice utilizzando il tag modificatorepericoloso, C # consente l'utilizzo di variabile puntatore nella funzione.codice non sicuro o il codice non gestito è l'uso di una variabile codicepuntatoredel blocco.

variabile puntatore

Un puntatore è un valore di indirizzo di un'altra variabile, vale a dire, l'indirizzo diretto della locazione di memoria.Come altre variabili o costanti, è necessario utilizzare il puntatore prima di altre memorie variabile dichiarazione di puntatore indirizzo.

La forma generale di una dichiarazione di variabile puntatore è:

Tipo * var-name;

Quanto segue è una dichiarazione puntatore valido:

int * ip; / * punti per un intero * /
doppia * dp; / * puntatore a un numero a precisione doppia * /
float * fp; / * puntatore a un float * /
char * ch / * puntatore a un char * /

L'esempio seguente illustra l'uso del C # utilizzando il modificatorenon sicuri quando il puntatore:

using System;
namespace UnsafeCodeApplication
{
    Programma di classe
    {
        static non sicuro void Main (string [] args)
        {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "I dati sono: {0}", var);
            Console.WriteLine ( "Address è: {0}", (int) p);
            Console.ReadKey ();
        }
    }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Dati è: 20
Indirizzo è: 99.215.364

Non è possibile dichiarare l'intero metodo come codice non sicuro, solo una parte della necessità di dichiarare il metodo come codice non sicuro. L'esempio che segue illustra questo punto.

Recupero di valori di dati utilizzando un puntatore

È possibile utilizzare il metodoToString () dei dati di posizione di riferimento memorizzati in un recupero variabili puntatore.L'esempio che segue illustra questo punto:

using System;
namespace UnsafeCodeApplication
{
   Programma di classe
   {
      public static void Main ()
      {
         pericoloso
         {
            int var = 20;
            int * p = & var;
            Console.WriteLine ( "I dati sono: {0}", var);
            Console.WriteLine ( "I dati sono: {0}", p-> ToString ());
            Console.WriteLine ( "Address è: {0}", (int) p);
         }
         Console.ReadKey ();
      }
   }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Dati è: 20
Dati è: 20
Indirizzo è: 77.128.984

Passando un puntatore come un metodo parametro

È possibile passare una variabile puntatore come un parametro al metodo di approccio. L'esempio che segue illustra questo punto:

using System;
namespace UnsafeCodeApplication
{
   classe TestPointer
   {
      pubblico non sicuro void swap (int * p, q int *)
      {
         int temp = * p;
         * P = * q;
         * Q = temperatura;
      }

      static void pericoloso pubblico principale ()
      {
         TestPointer p = new TestPointer ();
         int var1 = 10;
         int var2 = 20;
         int * x = & var1;
         int * y = & var2;
         
         Console.WriteLine ( "Prima Swap: var1: {0}, var2: {1}", var1, var2);
         p.swap (x, y);

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

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Prima Swap: var1: 10, var2: 20
Dopo Swap: var1: 20, var2: 10

Utilizzare i puntatori per accedere agli elementi dell'array

In C #, il nome della matrice e un puntatore ai dati di matrice con lo stesso tipo di dati è un puntatore a un diverso tipo di variabile. Ad esempio, int * p e int [] p è un tipo diverso. È possibile aumentare la variabile puntatore p, perché non è fisso nella memoria, ma l'indirizzo della matrice è fissa nella memoria, quindi non è possibile aggiungere una matrice p.

Quindi, se avete bisogno di utilizzare le variabili puntatore per accedere ai dati di matrice, come siamo soliti fare in C o C ++ come parole chiave da usare puntatore fissofisso.

L'esempio che segue illustra questo punto:

using System;
namespace UnsafeCodeApplication
{
   classe TestPointer
   {
      static void pericoloso pubblico principale ()
      {
         int list [] = {10, 100, 200};
         fissa (int * ptr = lista)

         / * Visualizza puntatore indirizzo di matrice * /
         for (int i = 0; i <3; i ++)
         {
            Console.WriteLine ( "Indirizzo di lista [{0}] = {1}", i, (int) (PTR + i));
            Console.WriteLine ( "Valore della lista [{0}] = {1}", i, * (PTR + i));
         }
         Console.ReadKey ();
      }
   }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Indirizzo di lista [0] = 31.627.168
Valore della lista [0] = 10
Indirizzo di lista [1] = 31.627.172
Valore della lista [1] = 100
Indirizzo di lista [2] = 31.627.176
Valore della lista [2] = 200

Compilare il codice non sicuro

Al fine di compilare il codice non sicuro, è necessario passare alla riga di comando del compilatore specificare la riga di comando/ non sicuro.

Ad esempio, per compilare un programma chiamato prog1.cs contengono codice non sicuro, immettere il comando nella riga di comando:

CSC / prog1.cs non sicure

Se si utilizza Visual Studio IDE, è necessario attivare il codice insicuro nelle proprietà del progetto.

Procedere come segue:

  • Con il nodo doppio clic Explorer (Esplora soluzioni) attributi (proprietà), aprire leproprietà del progetto (proprietà del progetto).
  • Fare clic sulla schedaGenera.
  • Selezionare l'opzione"Consenti codice unsafe".