Megosztás:


extern (C# referencia)

extern A módosító használatával deklarálhat egy külsőleg implementált metódust. A módosító gyakran használja az externDllImport attribútumot, amikor az Interop-szolgáltatások használatával nem felügyelt kódba hív be. Ebben az esetben a metódust a következő példában látható módon statickell deklarálnia:

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

A kulcsszóval extern külső szerelvény-aliast is definiálhat. Ezzel az aliassal ugyanazon összetevő különböző verzióira hivatkozhat egyetlen szerelvényből. További információ: extern alias.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Hiba az absztrakt és extern a módosítók együttes használatával módosítani ugyanazt a tagot. extern A módosító használata azt jelenti, hogy a metódus a C# kódon kívül van implementálva, míg a abstract módosító használata azt jelenti, hogy a metódus implementációja nem szerepel az osztályban.

A extern kulcsszónak korlátozottabb felhasználási módja van a C#-ban, mint a C++-ban. A C#-kulcsszó és a C++ kulcsszó összehasonlítása a C++ nyelvi referenciában a Hivatkozás megadása extern használatával című témakörben olvasható.

Ebben a példában a program egy sztringet kap a felhasználótól, és megjeleníti azt egy üzenetmezőben. A program a MessageBox User32.dll könyvtárból importált metódust használja.

//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);
    }
}

Ez a példa egy C# programot mutat be, amely egy C-kódtárba (natív DLL-be) hív be.

  1. Hozza létre a következő C fájlt, és nevezze el:cmdll.c

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Nyisson meg egy Visual Studio x64 (vagy x86) natív eszközök parancssori ablakot a Visual Studio telepítési könyvtárából, és a parancssorba írja be a cmdll.ccl -LD cmdll.c fájlt.

  3. Ugyanabban a könyvtárban hozza létre a következő C#-fájlt, és nevezze el: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. Nyisson meg egy Visual Studio x64 (vagy x86) natív eszközök parancssori ablakot a Visual Studio telepítési könyvtárából, és fordítsa le a fájlt a cm.cs következő beírással:

    csc cm.cs (az x64 parancssorhoz) – vagy – csc -platform:x86 cm.cs (az x86 parancssorhoz)

    Ez a parancs létrehozza a végrehajtható fájlt cm.exe.

  5. Futtassa az cm.exe parancsot. A SampleMethod metódus átadja az 5 értéket a DLL-fájlnak, amely 10-sel szorozva adja vissza az értéket. A program a következő kimenetet állítja elő:

    SampleMethod() returns 50.
    

C# nyelvspecifikáció

További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még