extern (Referenční dokumentace jazyka C#)
extern
Modifikátor se používá k deklaraci metody, která je implementována externě. Běžné použití modifikátoru extern
je s atributem DllImport
při použití služeb interoperability k volání do nespravovaného kódu. V tomto případě musí být metoda také deklarována jako static
, jak je znázorněno v následujícím příkladu:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Klíčové extern
slovo může také definovat alias externího sestavení, který umožňuje odkazovat na různé verze stejné komponenty z jednoho sestavení. Další informace najdete v externím aliasu.
Jedná se o chybu při použití abstraktních a extern
modifikátorů ke společné úpravě stejného členu. Použití modifikátoru extern
znamená, že metoda je implementována mimo kód jazyka C#, zatímco použití abstract
modifikátoru znamená, že implementace metody není ve třídě poskytována.
Externí klíčové slovo má v jazyce C# omezenější použití než v jazyce C++. Porovnání klíčového slova jazyka C# s klíčovým slovem jazyka C++ naleznete v tématu Použití extern k určení propojení v referenční dokumentaci jazyka C++.
Příklad 1
V tomto příkladu program obdrží řetězec od uživatele a zobrazí ho uvnitř pole zprávy. Program používá metodu MessageBox
importovanou z knihovny 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);
}
}
Příklad 2
Tento příklad znázorňuje program jazyka C#, který volá knihovnu jazyka C (nativní knihovnu DLL).
Vytvořte následující soubor C a pojmenujte ho
cmdll.c
:// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Otevřete okno příkazového řádku nativních nástrojů sady Visual Studio x64 (nebo x32) z instalačního adresáře sady Visual Studio a zkompilujte
cmdll.c
soubor zadáním cl -LD cmdll.c na příkazovém řádku.Ve stejném adresáři vytvořte následující soubor C# a pojmenujte ho
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)); } }
V instalačním adresáři sady Visual Studio otevřete okno příkazového řádku nativních nástrojů sady Visual Studio x64 (nebo x32) a zkompilujte
cm.cs
soubor zadáním:csc cm.cs (pro příkazový řádek x64) nebo csc -platform:x86 cm.cs (pro příkazový řádek x32)
Tím se vytvoří spustitelný soubor
cm.exe
.Spusťte
cm.exe
. MetodaSampleMethod
předá hodnotu 5 do souboru DLL, který vrátí hodnotu vynásobenou hodnotou 10. Program vytvoří následující výstup:SampleMethod() returns 50.
specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.