Sdílet prostřednictvím


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).

  1. 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;
    }
    
  2. 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.

  3. 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));
        }
    }
    
  4. 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.

  5. Spusťte cm.exe. Metoda SampleMethod 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#.

Viz také