Partilhar via


externo (Referência C#)

Usa o extern modificador para declarar um método que está implementado externamente. Um uso comum do extern modificador é com o DllImport atributo quando se usam serviços Interop para chamar código não gerido. Neste caso, deve também declarar o método como static, como mostrado no seguinte exemplo:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

Também pode usar a extern palavra-chave para definir um alias de assembly externo. Ao usar este pseudónimo, pode referenciar diferentes versões do mesmo componente dentro de um único conjunto. Para obter mais informações, consulte alias externos.

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.

É um erro usar o abstract e extern os modificadores juntos para modificar o mesmo elemento. Usar o extern modificador significa que o método é implementado fora do código C#, enquanto usar o abstract modificador significa que a implementação do método não é fornecida na classe.

A extern palavra-chave tem usos mais limitados em C# do que em C++. Para comparar a palavra-chave C# com a palavra-chave C++, consulte Usando extern para especificar vinculação na referência da linguagem C++.

Neste exemplo, o programa recebe uma cadeia de caracteres do usuário e a exibe dentro de uma caixa de mensagem. O programa usa o MessageBox método importado da biblioteca de User32.dll.

//using System.Runtime.InteropServices;
class ExternTest
{
    [DllImport("User32.dll", CharSet=CharSet.Unicode)]
    public static extern int MessageBox(IntPtr h, string m, string c, int type);

    static int Main()
    {
        string myString;
        Console.Write("Enter your message: ");
        myString = Console.ReadLine();
        return MessageBox((IntPtr)0, myString, "My Message Box", 0);
    }
}

Este exemplo ilustra um programa C# que chama uma biblioteca C (uma DLL nativa).

  1. Crie o seguinte arquivo C e nomeie-o cmdll.c:

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Abra uma janela do Prompt de Comando do Visual Studio x64 (ou x86) Native Tools a partir do diretório de instalação do Visual Studio e compile o cmdll.c ficheiro escrevendo cl -LD cmdll.c no prompt de comandos.

  3. No mesmo diretório, crie o seguinte arquivo C# e nomeie-o cm.cs:

    // cm.cs
    using System;
    using System.Runtime.InteropServices;
    public class MainClass
    {
        [DllImport("Cmdll.dll")]
          public static extern int SampleMethod(int x);
    
        static void Main()
        {
            Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
        }
    }
    
  4. Abra uma janela do Prompt de Comando Nativo Visual Studio x64 (ou x86) a partir do diretório de instalação do Visual Studio e compile o cm.cs ficheiro escrevendo:

    CSC cm.cs (para o Prompt de Comando X64) —OU— CSC -Platform:X86 cm.cs (para o Prompt de Comando X86)

    Este comando cria o ficheiro cm.exeexecutável .

  5. Execute o cm.exe. O SampleMethod método passa o valor 5 para o arquivo DLL, que retorna o valor multiplicado por 10. O programa produz a seguinte saída:

    SampleMethod() returns 50.
    

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.

Consulte também