Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.cdigitando 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.csdigitando: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 metodoSampleMethodpassa 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#.