Condividi tramite


extern (Riferimenti per C#)

Aggiornamento: novembre 2007

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 la classe 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(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);
    }

}

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

SampleMethod() returns 50.

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 seguente sezione inclusa in Specifiche del linguaggio C#:

  • 10.6.7 Metodi esterni

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Parole chiave di C#

Modificatori (Riferimenti per C#)

System.Runtime.InteropServices.DllImportAttribute

Altre risorse

Riferimenti per C#