Condividi tramite


extern (Riferimenti per C#)

Usare il extern modificatore per dichiarare un metodo implementato esternamente. Un uso comune del extern modificatore è con l'attributo DllImport quando si usano servizi di interoperabilità per chiamare nel codice non gestito. In questo caso, è anche necessario dichiarare il metodo come static, come illustrato nell'esempio seguente:

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

È anche possibile usare la extern parola chiave per definire un alias di assembly esterno. Usando questo alias, è possibile fare riferimento a versioni diverse dello stesso componente dall'interno di un singolo assembly. Per altre informazioni, vedere alias esterno.

Il riferimento al linguaggio C# documenta la versione rilasciata più di recente del linguaggio C#. Contiene anche la documentazione iniziale per le funzionalità nelle versioni di anteprima pubblica per la prossima versione del linguaggio di programmazione.

La documentazione identifica tutte le funzionalità introdotte nelle ultime tre versioni della lingua o nelle anteprime pubbliche correnti.

Suggerimento

Per trovare quando una funzionalità è stata introdotta per la prima volta in C#, vedere l'articolo sulla cronologia delle versioni del linguaggio C#.

Si tratta di un errore per usare i modificatori astratti e extern insieme per modificare lo stesso membro. L'uso del extern modificatore indica che il metodo viene implementato all'esterno del codice C#, mentre l'uso del modificatore indica che l'implementazione del abstract metodo non viene fornita nella classe .

La extern parola chiave ha usi più limitati in C# rispetto a C++. Per confrontare la parola chiave C# con la parola chiave C++, vedere Uso di extern per specificare un collegamento in Riferimenti al linguaggio C++.

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 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 di Visual Studio x64 (o x86) Native Tools dalla directory di installazione di Visual Studio e compilare il cmdll.c file 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 di Visual Studio x64 (o x86) Native Tools dalla directory di installazione di Visual Studio e compilare il cm.cs file digitando:

    csc cm.cs (per il prompt dei comandi x64) oppure csc -platform:x86 cm.cs (per il prompt dei comandi x86)

    Questo comando crea il file cm.exeeseguibile .

  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