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 Uso di extern per specificare un 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).
Creare il seguente file C e denominarlo
cmdll.c
:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
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.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)); } }
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
.Eseguire
cm.exe
. Il metodoSampleMethod
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#.