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

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 altre informazioni, vedere alias esterno.

È errato usare i modificatori abstract 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.

La parola chiave extern ha un utilizzo più limitato in c# rispetto a C++. Per confrontare la parola chiave C# con la parola chiave C++, vedere Utilizzo di extern per specificare il collegamento in Riferimenti al linguaggio C++.

Esempio 1

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

Esempio 2

In questo esempio viene illustrato un programma C# che chiama una libreria C (una DLL nativa).

  1. Creare il seguente file C e denominarlo cmdll.c:

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Aprire una finestra del prompt dei comandi degli strumenti nativi di Visual Studio x64 o x32 dalla directory di installazione di Visual Studio e compilare il file cmdll.c digitando cl -LD cmdll.c al prompt dei comandi.

  3. Nella stessa directory creare il seguente file C# e denominarlo 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. Aprire una finestra del prompt dei comandi degli strumenti nativi di Visual Studio x64 o x32) dalla directory di installazione di Visual Studio e compilare il file cm.cs digitando:

    csc cm.cs (al prompt dei comandi x64) o csc-platform:x86 cm.cs (al prompt dei comandi x32)

    Verrà creato il file eseguibile cm.exe.

  5. Eseguire cm.exe. Il metodo SampleMethod passa il valore 5 al file DLL, che restituisce il valore moltiplicato per 10. Il programma produce l'output seguente:

    SampleMethod() returns 50.
    

Specifiche del linguaggio C#

Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedi anche