extern (Riferimenti per C#)

Il modificatore extern consente di dichiarare un metodo implementato esternamente. Il modificatore extern viene utilizzato in genere con l'attributo DllImport quando si effettua una chiamata in codice non gestito tramite i servizi di interoperabilità. In questo caso, anche il metodo deve essere dichiarato come static, come illustrato nell'esempio seguente:

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

Nota

La parola chiave extern può definire anche un alias di assembly esterno, rendendo possibile il riferimento a versioni diverse dello stesso componente dall'interno di un unico assembly. Per ulteriori informazioni, vedere extern alias (Riferimenti per C#).

È errato utilizzare i modificatori abstract (Riferimenti per C#) e extern contemporaneamente per modificare lo stesso membro. L'utilizzo del modificatore extern indica che il metodo viene implementato all'esterno del codice C#, mentre l'utilizzo del modificatore abstract indica che l'implementazione del metodo non viene fornita nella classe.

Nota

La parola chiave extern ha un utilizzo limitato rispetto a C++. Per un confronto con la stessa parola chiave di C++, vedere Using extern to Specify Linkage in Riferimenti al linguaggio C++.

Esempio

In questo esempio il programma riceve una stringa dall'utente e la visualizza in una finestra di messaggio. Il programma utilizza il metodo MessageBox importato dalla libreria 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);
        }

    }

In questo esempio viene creata una DLL da un programma C che viene richiamata dall'interno del programma C# nell'esempio successivo.

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

In questo esempio vengono utilizzati i file CM.cs e Cmdll.c per illustrare l'utilizzo di extern. Il file C è la DLL esterna creata nell'esempio 2 che viene richiamata dall'interno del programma 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));
   }
}
  

Note

Per compilare il progetto:

  • Compilare Cmdll.c per creare una DLL utilizzando la riga di comando di Visual C++:

    cl /LD Cmdll.c

  • Compilare CM.cs utilizzando la riga di comando:

    csc CM.cs

Verrà creato il file eseguibile CM.exe. Quando si eseguirà questo programma, SampleMethod passerà il valore 5 al file DLL, che restituirà il valore moltiplicato per 10.

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Modificatori (Riferimenti per C#)

System.Runtime.InteropServices.DllImportAttribute

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#