extern (C#-verwijzing)
De extern
modifier wordt gebruikt om een methode te declareren die extern wordt geïmplementeerd. Een veelvoorkomend gebruik van de extern
wijzigingsfunctie is met het DllImport
kenmerk wanneer u Interop-services gebruikt om onbeheerde code aan te roepen. In dit geval moet de methode ook worden gedeclareerd als static
, zoals wordt weergegeven in het volgende voorbeeld:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Het extern
trefwoord kan ook een externe assemblyalias definiëren, waardoor er vanuit één assembly naar verschillende versies van hetzelfde onderdeel kan worden verwezen. Zie extern alias voor meer informatie.
Het is een fout om de abstracte en extern
modifiers samen te gebruiken om hetzelfde lid te wijzigen. Het gebruik van de extern
modifier betekent dat de methode buiten de C#-code wordt geïmplementeerd, terwijl het gebruik van de abstract
modifier betekent dat de methode-implementatie niet in de klasse wordt geleverd.
Het externe trefwoord heeft meer beperkte toepassingen in C# dan in C++. Als u het C#-trefwoord wilt vergelijken met het C++-trefwoord, raadpleegt u Extern gebruiken om Koppeling opgeven in de C++-taalreferentie op te geven.
Voorbeeld 1
In dit voorbeeld ontvangt het programma een tekenreeks van de gebruiker en wordt deze weergegeven in een berichtvak. Het programma gebruikt de MessageBox
methode die is geïmporteerd uit de User32.dll-bibliotheek.
//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);
}
}
Voorbeeld 2
In dit voorbeeld ziet u een C#-programma dat een C#-bibliotheek aanroept (een systeemeigen DLL).
Maak het volgende C-bestand en geef het de
cmdll.c
naam:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Open een Visual Studio x64 (of x32) Native Tools Command Prompt-venster vanuit de installatiemap van Visual Studio en compileer het
cmdll.c
bestand door cl -LD cmdll.c te typen bij de opdrachtprompt.Maak in dezelfde map het volgende C#-bestand en geef het de
cm.cs
naam:// 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)); } }
Open een Visual Studio x64 (of x32) Native Tools Command Prompt-venster vanuit de installatiemap van Visual Studio en compileer het
cm.cs
bestand door het volgende te typen:csc cm.cs (voor de x64-opdrachtprompt) of csc -platform:x86 cm.cs (voor de x32-opdrachtprompt)
Hiermee wordt het uitvoerbare bestand
cm.exe
gemaakt.Voer
cm.exe
uit. DeSampleMethod
methode geeft de waarde 5 door aan het DLL-bestand, waarmee de waarde wordt vermenigvuldigd met 10. Het programma produceert de volgende uitvoer:SampleMethod() returns 50.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.