Partilhar via


Seguro e o código não seguro (versus translation from VPE for Csharp Java)

Um recurso particularmente interessante do translation from VPE for Csharp é o suporte para o código de fortemente tipado.Normalmente, o common linguagem tempo de execução (CLR) assume a responsabilidade por supervisionar o comportamento do código Microsoft intermediate linguagem (MSIL) e impede que qualquer operação questionável.No entanto, há vezes quando você deseja acessar diretamente o baixo nível funcionalidades, sistema autônomo chamadas de API do Win32, e você tem permissão para fazer isso, desde que você assumir a responsabilidade para garantir que esse código está funcionando corretamente.Esse código deve ser colocado dentro de blocos não seguros no nosso código-fonte.

A palavra-chave não segura

Código de translation from VPE for Csharp que faz chamadas de API de nível inferior, usa a aritmética de ponteiro ou efetua alguma Outros operação ofensivos, deverá ser colocado dentro de blocos marcados com o não seguro palavra-chave.Uma das seguintes opções podem ser marcada sistema autônomo não segura:

  • Um método inteiro.

  • Um bloco de código entre chaves.

  • Uma demonstrativo individual.

O exemplo a seguir demonstra o uso de unsafe em todas as três situações acima:

class TestUnsafe
{
    unsafe static void PointyMethod()
    {
        int i=10;

        int *p = &i;
        System.Console.WriteLine("*p = " + *p);
        System.Console.WriteLine("Address of p = {0:X2}\n", (int)p);
    }

    static void StillPointy()
    {
        int i=10;

        unsafe
        {
            int *p = &i;
            System.Console.WriteLine("*p = " + *p);
            System.Console.WriteLine("Address of p = {0:X2}\n", (int)p);
        }
    }

    static void Main()
    {
        PointyMethod();
        StillPointy();
    }
}

Nesse código, o inteiro PointyMethod() método está marcado não seguro como o método declara e utiliza ponteiros. The StillPointy() método marca a um bloco de código sistema autônomo não seguros, sistema autônomo este bloco novamente usa ponteiros.

A palavra-chave fixa

No código seguro, o coletor de lixo é bastante disponível para mover um objeto durante sua tempo de vida em sua missão para organizar e condensar liberar recursos.No entanto, se o seu código utiliza ponteiros, esse comportamento pode com com facilidade provocar resultados inesperados, portanto, você pode instruir o coletor de lixo para não mover certos objetos usando o demonstrativo fixed.

O código a seguir mostra o fixed palavra-chave que está sendo usada para garantir uma matriz não é movida pelo sistema durante a execução de um bloco de código na PointyMethod() método. Observe que fixed só é usada em código não seguro:

class TestFixed
{
    public static void PointyMethod(char[] array)
    {
        unsafe
        {
            fixed (char *p = array)
            {
                for (int i=0; i<array.Length; i++)
                {
                    System.Console.Write(*(p+i));
                }
            }
        }
    }

    static void Main()
    {
        char[] array = { 'H', 'e', 'l', 'l', 'o' };
        PointyMethod(array);
    }
}

Consulte também

Tarefas

Exemplo de código não seguro

Conceitos

Guia de Programação C#

Referência

Não seguro código e ponteiros (guia de programação C#)

Outros recursos

Translation from VPE for Csharp linguagem de programação para desenvolvedores Java