Dela via


extern (C#-referens)

extern Använd modifieraren för att deklarera en metod som implementeras externt. En vanlig användning av extern modifieraren är med DllImport attributet när du använder Interop-tjänster för att anropa ohanterad kod. I det här fallet måste du även deklarera metoden som static, som du ser i följande exempel:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

Du kan också använda nyckelordet extern för att definiera ett externt sammansättningsalias. Med hjälp av det här aliaset kan du referera till olika versioner av samma komponent inifrån en enda sammansättning. Mer information finns i externt alias.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

Det är ett fel att använda abstrakta och extern modifierare tillsammans för att ändra samma medlem. extern Att använda modifieraren innebär att metoden implementeras utanför C#-koden, medan modifieraren abstract innebär att metodimplementeringen inte tillhandahålls i klassen.

Nyckelordet extern har mer begränsade användningsområden i C# än i C++. Om du vill jämföra nyckelordet C# med nyckelordet C++ läser du Använda extern för att ange länkning i C++-språkreferensen.

I det här exemplet tar programmet emot en sträng från användaren och visar den i en meddelanderuta. Programmet använder den metod som MessageBox importerats från biblioteket 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);
    }
}

Det här exemplet illustrerar ett C#-program som anropar till ett C-bibliotek (en intern DLL).

  1. Skapa följande C-fil och ge den cmdll.cnamnet :

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Öppna ett Visual Studio x64-fönster (eller x86) native Tools Command Prompt från Visual Studio-installationskatalogen cmdll.c och kompilera filen genom att skriva cl -LD cmdll.c i kommandotolken.

  3. Skapa följande C#-fil i samma katalog och ge den cm.csnamnet :

    // 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. Öppna kommandotolken i Visual Studio x64 (eller x86) från installationskatalogen för Visual Studio och kompilera cm.cs filen genom att skriva:

    csc cm.cs (för kommandotolken x64) – eller – csc -platform:x86 cm.cs (för kommandotolken x86)

    Det här kommandot skapar den körbara filen cm.exe.

  5. Kör cm.exe. Metoden SampleMethod skickar värdet 5 till DLL-filen, som returnerar värdet multiplicerat med 10. Programmet genererar följande utdata:

    SampleMethod() returns 50.
    

Språkspecifikation för C#

Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.

Se även