Latest web development tutorials

C # código no seguro

Cuando un bloque de código usando la etiqueta de modificadorinsegura, C # permite el uso de variable de puntero en la función.código no seguro o código no administrado es el uso de una variable de código de bloquepuntero.

variable apuntador

Un puntero es un valor variable de la dirección de otra variable, es decir, la dirección directa de la posición de memoria.Al igual que otras variables o constantes, debe utilizar el puntero antes de otro almacenamiento declaración de variable puntero de dirección.

La forma general de una declaración de variable puntero es:

* Tipo-var nombre;

La siguiente es una declaración de puntero válido:

int * ip; / * puntos a un entero * /
* dp doble; / * puntero a un número de doble precisión * /
flotar * fp; / * puntero a un flotador * /
char * ch / * puntero a un char * /

El siguiente ejemplo ilustra el uso de la C # usando modificadorinseguro cuando el puntero:

using System;
espacio de nombres UnsafeCodeApplication
{
    Programa de clases
    {
        estática insegura void main (String [] args)
        {
            var int = 20;
            int * p = & var;
            Console.WriteLine ( "Los datos son: {0}", var);
            Console.WriteLine ( "La dirección es: {0}", (int) p);
            Console.ReadKey ();
        }
    }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Los datos son: 20
La dirección es: 99215364

No se puede declarar el método entero como código no seguro, sólo una parte de la necesidad de declarar el método como código no seguro. El siguiente ejemplo ilustra este punto.

Recuperación de valores de datos utilizando un puntero

Usted puede utilizar el métodoToString () de los datos de posición de referencia almacenados en una variable de puntero de recuperación.El siguiente ejemplo ilustra este punto:

using System;
espacio de nombres UnsafeCodeApplication
{
   Programa de clases
   {
      public static void Principal ()
      {
         inseguro
         {
            var int = 20;
            int * p = & var;
            Console.WriteLine ( "Los datos son: {0}", var);
            Console.WriteLine ( "Los datos son: {0}", p-> ToString ());
            Console.WriteLine ( "La dirección es: {0}", (int) p);
         }
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Los datos son: 20
Los datos son: 20
La dirección es: 77128984

Pasando un puntero como un método de parámetros

Puede pasar una variable puntero como un parámetro para el método de enfoque. El siguiente ejemplo ilustra este punto:

using System;
espacio de nombres UnsafeCodeApplication
{
   clase TestPointer
   {
      pública insegura de intercambio void (int * p, q int *)
      {
         int temp = * p;
         * P * = q;
         * Q = temp;
      }

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

         Console.WriteLine ( "Después de intercambio: var1: {0}, var2: {1}", var1, var2);
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Antes de intercambio: var1: 10, var2: 20
Después de intercambio: var1: 20, var2: 10

Utilizar punteros para acceder a elementos de la matriz

En C #, el nombre de la matriz y un puntero a la matriz de datos con el mismo tipo de datos es un puntero a un diferentes tipos de variables. Por ejemplo, int * p y int [] p es un tipo diferente. Puede aumentar la variable puntero P, ya que no se fija en la memoria, pero la dirección de la matriz es fija en la memoria, por lo que no se puede agregar una matriz p.

Por lo tanto, si usted necesita utilizar las variables de puntero para acceder a los datos de la matriz, ya que normalmente no en C o C ++ como palabras clave a utilizar puntero fijofijo.

El siguiente ejemplo ilustra este punto:

using System;
espacio de nombres UnsafeCodeApplication
{
   clase TestPointer
   {
      static void insegura pública Principal ()
      {
         int [] list = {10, 100, 200};
         fija (int * ptr = lista)

         / * Mostrar la dirección de puntero array * /
         for (int i = 0; i <3; i ++)
         {
            Console.WriteLine ( "Dirección de la lista [{0}] = {1}", i, (int) (ptr + i));
            Console.WriteLine ( "Valor de la lista [{0}] = {1}", i, * (ptr + i));
         }
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Dirección de la lista [0] = 31627168
Valor de la lista [0] = 10
Dirección de la lista [1] = 31627172
Valor de la lista [1] = 100
Dirección de la lista [2] = 31627176
Valor de la lista [2] = 200

Compilar código no seguro

Para compilar código no seguro, debe cambiar a la línea de comandos del compilador especificar la línea de comandos/ inseguro.

Por ejemplo, para compilar un programa llamado prog1.cs contienen código no seguro, entran en el comando en la línea de comandos:

CSC / prog1.cs inseguras

Si está utilizando Visual Studio IDE, necesita habilitar código inseguro en las propiedades del proyecto.

Proceder de la siguiente manera:

  • Por nodo doble clic en Explorer (Explorador de soluciones) atributos (propiedades), abra laspropiedades del proyecto (Propiedades del proyecto).
  • Haga clic en la pestañaGenerar.
  • Seleccionar la opción"Permitir código no seguro".