externo (translation from VPE for Csharp Reference)

The extern modificador é usado para declarar um método é implementado externamente. Um uso comum do extern modificador é com o DllImport atributo quando você estiver usando serviços de interoperabilidade para chamar código não gerenciado. Nesse caso, o método também deve ser declarado sistema autônomo static, conforme mostrado no exemplo a seguir:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Observação:

O extern palavra-chave também pode definir um alias de assembly externo, o que torna possível fazer referência a versões diferentes do mesmo componente de um único assembly. Para obter mais informações, consulte alias externo (translation from VPE for Csharp Reference).

É um erro para usar o abstract (referência C#)  e extern modificador para modificar o mesmo membro. Usando o extern modificador significa que o método é implementado fora do código translation from VPE for Csharp, enquanto usando o abstract modificador significa que a implementação do método não é fornecida na classe.

Observação:

O extern palavra-chave mais limitou usos que em C++. Para comparar com a palavra-chave C++, consulte Using externo to Specify Linkage na referência de linguagem C++.

Exemplo

Neste exemplo, o programa recebe uma sequência do usuário e exibe-dentro de uma caixa de mensagem.O programa usa o MessageBox método importado da biblioteca user32.dll.

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

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

}

Este exemplo cria uma DLL de um programa C que é chamado a partir do programa translation from VPE for Csharp no próximo exemplo.

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

Este exemplo usa dois arquivos, CM.cs e Cmdll.c, para demonstrar extern. Arquivo C é a DLL externa criada no exemplo 2 é chamado a partir do programa translation from VPE for Csharp.

// 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));
   }
}

SampleMethod() returns 50.

Comentários

Para construir o projeto:

  • Compilar Cmdll.c para uma DLL, usando a linha de comando do Visual C++:

    cl /LD Cmdll.c

  • Compilar CM.cs usando a linha de comando:

    csc CM.cs

Isso criará o arquivo executável CM.exe. Quando você executa esse programa, SampleMethod passará o valor 5 para o arquivo DLL, que retorna o valor multiplicado por 10.

Especificação da linguagem C#

Para obter mais informações, consulte a seção a seguir no Especificação da linguagem C#:

  • 10.6.7 Métodos externos

Consulte também

Conceitos

Guia de Programação C#

Referência

Palavras-chave C#

Modificadores (referência C#)

System.Runtime.InteropServices.DllImportAttribute

Outros recursos

Referência C#