extern (C#-Referenz)
Der extern
-Modifizierer wird verwendet, um eine extern implementierte Methode zu deklarieren. Der extern
-Modifizierer wird häufig mit dem DllImport
-Attribut verwendet, wenn Sie nicht verwalteten Code mit Interop-Diensten aufrufen. In diesem Fall muss die Methode auch als static
deklariert werden, wie im folgenden Beispiel gezeigt:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Das extern
-Schlüsselwort kann ebenso einen externen Assemblyalias definieren. Dadurch wird es möglich, aus einer einzigen Assembly heraus auf unterschiedliche Versionen derselben Komponente zu verweisen. Weitere Informationen finden Sie unter extern-Alias.
Es ist ein Fehler, den abstract-Modifizierer und den extern
-Modifizierer gleichzeitig auf demselben Member anzuwenden. So bedeutet die Verwendung des extern
-Modifizierers, dass die Methode außerhalb des C#-Codes implementiert wird, während bei Verwendung des abstract
-Modifizierers die Methodenimplementierung nicht in der Klasse bereitgestellt wird.
Die Verwendung des extern-Schlüsselworts ist in C# eingeschränkter als in C++. Informationen zum Vergleichen des C#-Schlüsselworts finden Sie unter Verwenden von „extern“ zur Angabe der Verknüpfung in der C++-Sprachreferenz.
Beispiel 1
In diesem Beispiel empfängt das Programm eine Zeichenfolge vom Benutzer und zeigt sie in einem Meldungsfeld an. Das Programm verwendet die MessageBox
-Methode, die von der User32.dll-Bibliothek importiert wurde.
//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);
}
}
Beispiel 2
Dieses Beispiel veranschaulicht ein C#-Programm, das eine C-Bibliothek aufruft (eine native DLL).
Erstellen Sie die folgende C-Datei mit dem Namen
cmdll.c
:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Öffnen Sie ein Visual Studio x64 (oder x32) Native Tools-Eingabeaufforderungsfenster im Visual Studio-Installationsverzeichnis, und kompilieren Sie die
cmdll.c
-Datei, indem Sie in der Eingabeaufforderung cl -LD cmdll.c eingeben.Erstellen Sie im gleichen Verzeichnis die folgende C#-Datei mit dem Namen
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)); } }
Öffnen Sie ein Visual Studio x64 (oder x32) Native Tools-Eingabeaufforderungsfenster im Visual Studio-Installationsverzeichnis, und kompilieren Sie die
cm.cs
-Datei, indem Sie Folgendes eingeben:csc cm.cs (für die x64-Eingabeaufforderung) oder csc -platform:x86 cm.cs (für die x32-Eingabeaufforderung)
Dadurch wird die ausführbare Datei
cm.exe
erstellt.Führen Sie
cm.exe
aus. DieSampleMethod
-Methode übergibt den Wert 5 an die DLL-Datei, die den mit 10 multiplizierten Wert zurückgibt. Das Programm erzeugt die folgende Ausgabe:SampleMethod() returns 50.
C#-Sprachspezifikation
Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.