Condividi tramite


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 ulteriori informazioni, vedere extern alias (Riferimenti per C#).

È errato utilizzare 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

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

3. 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) oppurecsc /platform:x86 cm.cs (al prompt dei comandi x32)

Verrà creato il file eseguibile cm.exe.

4. 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 Specifiche del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Modificatori (Riferimenti per C#)

DllImportAttribute

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#