extern (Referencia de C#)

Actualización: noviembre 2007

El modificador extern se utiliza para declarar un método que se implementa externamente. Un uso común del modificador extern es con el atributo DllImport cuando se utilizan 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();
Nota:

La palabra clave extern también puede definir un alias de ensamblado externo, lo que hace posible hacer referencia a diferentes versiones del mismo componente desde un único ensamblado. Para obtener más información, vea alias externo (Referencia de C#).

Es incorrecto utilizar simultáneamente los modificadores abstract (Referencia de C#) y extern 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 clase no proporciona la implementación del método.

Nota:

El uso de la palabra clave extern es más limitado que en C++. Para compararla con la palabra clave de C++, vea Using extern to Specify Linkage en la Referencia del lenguaje C++.

Ejemplo

En este ejemplo, el programa recibe una cadena del usuario y la muestra dentro de un cuadro de mensaje. El programa utiliza 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(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);
    }

}

En este ejemplo se crea un archivo DLL desde un programa de C invocado desde el programa de C# del siguiente ejemplo.

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

Este ejemplo utiliza dos archivos, CM.cs y Cmdll.c, para demostrar el uso de extern. El archivo C es un archivo DLL externo creado en el ejemplo 2 que se invoca desde el programa escrito en C#.

// 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.

Comentarios

Para generar el proyecto:

  • Compile Cmdll.c como una DLL mediante la línea de comandos de Visual C++:

    cl /LD Cmdll.c

  • Compile CM.cs mediante la línea de comandos:

    csc CM.cs

De esta forma, se creará el archivo ejecutable CM.exe. Cuando ejecute este programa, SampleMethod pasará el valor 5 al archivo DLL, el cual devolverá el valor multiplicado por 10.

Especificación del lenguaje C#

Para obtener más información, vea la siguiente sección de Especificación del lenguaje C#.

  • 10.6.7 Métodos externos

Vea también

Conceptos

Guía de programación de C#

Referencia

Palabras clave de C#

Modificadores (Referencia de C#)

System.Runtime.InteropServices.DllImportAttribute

Otros recursos

Referencia de C#