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).
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; }
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.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)); } }
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
.Execute
cm.exe
. O métodoSampleMethod
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#.