Comparteix via


extern (Referencia de C#)

Use el extern modificador para declarar un método implementado externamente. Un uso común del extern modificador es con el DllImport atributo cuando se usan servicios de interoperabilidad para llamar a código no administrado. En este caso, también debe declarar el método como static, como se muestra en el ejemplo siguiente:

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

También puede usar la extern palabra clave para definir un alias de ensamblado externo. Con este alias, puede hacer referencia a versiones diferentes del mismo componente desde dentro de un único ensamblado. Para obtener más información, vea alias externo.

La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

Es un error usar los modificadores abstractos y extern juntos para modificar el mismo miembro. El uso del extern modificador significa que el método se implementa fuera del código de C#, mientras que el uso del abstract modificador significa que la implementación del método no se proporciona en la clase .

La extern palabra clave tiene más usos 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++.

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

En este ejemplo se muestra un programa de C# que llama a una biblioteca de C (una DLL nativa).

  1. 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;
    }
    
  2. Abra una ventana del símbolo del sistema de Visual Studio x64 (o x86) Native Tools desde el directorio de instalación de Visual Studio y compile el cmdll.c archivo escribiendo cl -LD cmdll.c en el símbolo del sistema.

  3. 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));
        }
    }
    
  4. Abra una ventana del símbolo del sistema de Visual Studio x64 (o x86) Native Tools desde el directorio de instalación de Visual Studio y compile el cm.cs archivo escribiendo:

    csc cm.cs (para el símbolo del sistema x64) (o bien) csc -platform:x86 cm.cs (para el símbolo del sistema x86)

    Este comando crea el archivo cm.exeejecutable .

  5. Ejecute cm.exe. El método SampleMethod 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#.

Vea también