extern (Referência de C#)

O modificador extern é usado para declarar um método implementado externamente. Um uso comum do modificador extern é com o atributo DllImport quando você está usando serviços Interop para chamar código não gerenciado. Nesse caso, o método também deve ser declarado como static conforme mostrado no seguinte exemplo:

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

A palavra-chave extern também pode definir um alias de assembly externo que possibilita referenciar diferentes versões do mesmo componente de dentro de um único assembly. Para obter mais informações, consulte alias externo.

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

A palavra-chave extern possui utilizações mais limitadas em C# do que em C++. Para comparar a palavra-chave de C# com a palavra-chave de C++, consulte Usando extern para especificar vínculos na referência da linguagem C++.

Exemplo 1

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 método MessageBox importado da biblioteca 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);
    }
}

Exemplo 2

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

  1. Crie o seguinte arquivo em C e atribua o nome cmdll.c:

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Abra uma janela do Prompt de Comando de Ferramentas Nativas do Visual Studio x64 (ou x32) do diretório de instalação do Visual Studio e compile o arquivo cmdll.c digitando cl -LD cmdll.c no prompt de comando.

  3. No mesmo diretório, crie o seguinte arquivo em C# e atribua o nome 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 de Ferramentas Nativas do Visual Studio x64 (ou x32) do diretório de instalação do Visual Studio e compile o arquivo cm.cs ao digitar:

    csc cm.cs (para o prompt de comando do x64) – ou – csc -platform:x86 cm.cs (para o prompt de comando do x32)

    Isso criará o arquivo executável cm.exe.

  5. Execute cm.exe. O método SampleMethod passa o valor 5 ao arquivo de 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 de C#.

Confira também