extern (odwołanie w C#)

Modyfikator extern służy do deklarowania metody implementowane zewnętrznie. Typowym zastosowaniem extern modyfikatora jest użycie atrybutu DllImport w przypadku używania usług Międzyoperajności w celu wywołania kodu niezarządzanego. W takim przypadku metoda musi być również zadeklarowana jako static, jak pokazano w poniższym przykładzie:

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

Słowo extern kluczowe może również definiować alias zestawu zewnętrznego, co umożliwia odwołanie się do różnych wersji tego samego składnika z poziomu pojedynczego zestawu. Aby uzyskać więcej informacji, zobacz extern alias.

Jest to błąd podczas modyfikowania tego samego elementu członkowskiego za pomocą abstrakcji i extern modyfikatorów. extern Użycie modyfikatora oznacza, że metoda jest implementowana poza kodem języka C#, natomiast użycie abstract modyfikatora oznacza, że implementacja metody nie jest podana w klasie.

Użycie słowa kluczowego extern podlega większym ograniczeniom w języku C# niż w języku C++. Aby porównać to słowo kluczowe w języku C# z wersją w języku C++, zobacz temat „Używanie słowa kluczowego extern w celu określenia powiązania” w dokumentacji języka C++.

Przykład 1

W tym przykładzie program odbiera ciąg od użytkownika i wyświetla go wewnątrz pola komunikatu. Program używa MessageBox metody zaimportowanej z biblioteki 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);
    }
}

Przykład 2

W tym przykładzie pokazano program w języku C#, który wywołuje bibliotekę C (natywną bibliotekę DLL).

  1. Utwórz następujący plik C i nadaj mu cmdll.cnazwę :

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Otwórz okno wiersza polecenia narzędzi natywnych programu Visual Studio x64 (lub x32) z katalogu instalacyjnego programu Visual Studio i skompiluj cmdll.c plik, wpisując cl -LD cmdll.c w wierszu polecenia.

  3. W tym samym katalogu utwórz następujący plik C# i nadaj mu cm.csnazwę :

    // 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. Otwórz okno wiersza polecenia narzędzi natywnych programu Visual Studio x64 (lub x32) z katalogu instalacyjnego programu Visual Studio i skompiluj cm.cs plik, wpisując polecenie:

    csc cm.cs (dla wiersza polecenia x64) — lub — csc -platform:x86 cm.cs (w wierszu polecenia x32)

    Spowoduje to utworzenie pliku cm.exewykonywalnego .

  5. Uruchom program cm.exe. Metoda SampleMethod przekazuje wartość 5 do pliku DLL, który zwraca wartość pomnożną przez 10. Program generuje następujące dane wyjściowe:

    SampleMethod() returns 50.
    

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też