extern (Referencia de C#)
El modificador extern
se usa para declarar un método que se implementa externamente. Un uso común del modificador extern
es con el atributo DllImport
al usar servicios de interoperabilidad para llamar a código no administrado. En este caso, el método se debe declarar también como static
, como se muestra en el ejemplo siguiente:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
La palabra clave extern
también puede definir un alias del ensamblado externo, lo que permite hacer referencia a diferentes versiones del mismo componente desde un único ensamblado. Para obtener más información, vea alias externo.
Es un error usar los modificadores abstract y extern
juntos para modificar el mismo miembro. El uso del modificador extern
significa que el método se implementa fuera del código de C#, mientras que el uso del modificador abstract
significa que la implementación del método no se proporciona en la clase.
La palabra clave extern tiene usos más limitados en C# que en C++. Para comparar la palabra clave de C# con la de C++, consulte el tema Uso de extern para especificar vinculación en la referencia del lenguaje C++.
Ejemplo 1
En este ejemplo, el programa recibe una cadena del usuario y la muestra en un cuadro de mensaje. El programa usa el método MessageBox
importado de la 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);
}
}
Ejemplo 2
En este ejemplo se muestra un programa de C# que llama a una biblioteca de C (una DLL nativa).
Cree el archivo de C siguiente y denomínelo
cmdll.c
:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Abra una ventana del símbolo del sistema de las herramientas nativas de Visual Studio x64 (o x32) desde el directorio de instalación de Visual Studio y compile el archivo
cmdll.c
escribiendo cl -LD cmdll.c en el símbolo del sistema.En el mismo directorio, cree el siguiente archivo de C# y denomínelo
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 una ventana del símbolo del sistema de las herramientas nativas de Visual Studio x64 (o x32) del directorio de instalación de Visual Studio y compile el archivo
cm.cs
escribiendo:csc cm.cs (para el símbolo del sistema x64), o bien csc -platform:x86 cm.cs (para el símbolo del sistema x32)
De esta forma, se creará el archivo ejecutable
cm.exe
.Ejecute
cm.exe
. El métodoSampleMethod
pasa el valor 5 al archivo DLL, que devuelve el valor multiplicado por 10. El programa produce el siguiente resultado:SampleMethod() returns 50.
Especificación del lenguaje C#
Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.