extern (odwołanie w C#)extern (C# Reference)

extern Modyfikator służy do deklarowania metody, która jest implementowana zewnętrznie.The extern modifier is used to declare a method that is implemented externally. Typowym zastosowaniem extern modyfikatora jest z atrybutem, DllImport Jeśli używasz usług międzyoperacyjnych do wywoływania kodu niezarządzanego.A common use of the extern modifier is with the DllImport attribute when you are using Interop services to call into unmanaged code. W takim przypadku metoda musi być również zadeklarowana jako static, jak pokazano w następującym przykładzie:In this case, the method must also be declared as static, as shown in the following example:

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

extern Słowo kluczowe może również definiować zewnętrzny alias zestawu, dzięki czemu można odwoływać się do różnych wersji tego samego składnika z poziomu jednego zestawu.The extern keyword can also define an external assembly alias, which makes it possible to reference different versions of the same component from within a single assembly. Aby uzyskać więcej informacji, zobacz alias zewnętrzny.For more information, see extern alias.

Jest to błąd, aby użyć abstrakcyjny i extern modyfikatorów, aby zmodyfikować ten sam element członkowski.It is an error to use the abstract and extern modifiers together to modify the same member. Użycie modyfikatora oznacza, że metoda jest implementowana poza C# kodem abstract , podczas gdy użycie modyfikatora oznacza, że implementacja metody nie jest podana w klasie. externUsing the extern modifier means that the method is implemented outside the C# code, whereas using the abstract modifier means that the method implementation is not provided in the class.

Użycie słowa kluczowego extern podlega większym ograniczeniom w języku C# niż w języku C++.The extern keyword has more limited uses in C# than in 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++.To compare the C# keyword with the C++ keyword, see Using extern to Specify Linkage in the C++ Language Reference.

Przykład 1Example 1

W tym przykładzie program odbiera ciąg od użytkownika i wyświetla go w oknie komunikatu.In this example, the program receives a string from the user and displays it inside a message box. Program używa MessageBox metody zaimportowanej z biblioteki User32. dll.The program uses the MessageBox method imported from the User32.dll library.

//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 2Example 2

Ten przykład ilustruje C# program wywoływany do biblioteki języka C (NATYWNEJ biblioteki dll).This example illustrates a C# program that calls into a C library (a native DLL).

  1. Utwórz następujący plik C i nadaj mu cmdll.cnazwę:Create the following C file and name it cmdll.c:

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Otwórz okno wiersza polecenia narzędzi Visual Studio x64 (lub x32) Native Tools z katalogu instalacyjnego programu Visual Studio i skompiluj cmdll.c plik, wpisując CL-LD cmdll. c w wierszu polecenia.Open a Visual Studio x64 (or x32) Native Tools Command Prompt window from the Visual Studio installation directory and compile the cmdll.c file by typing cl -LD cmdll.c at the command prompt.

  3. W tym samym katalogu Utwórz następujący C# plik i nadaj mu cm.csnazwę:In the same directory, create the following C# file and name it 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. Otwórz okno wiersza polecenia narzędzi Visual Studio x64 (lub x32) Native Tools z katalogu instalacyjnego programu Visual Studio i skompiluj cm.cs plik, wpisując:Open a Visual Studio x64 (or x32) Native Tools Command Prompt window from the Visual Studio installation directory and compile the cm.cs file by typing:

    csc cm.cs (w wierszu polecenia x64) — lub — CSC-platform: x86 cm.cs (dla wiersza polecenia x32)csc cm.cs (for the x64 command prompt) —or— csc -platform:x86 cm.cs (for the x32 command prompt)

    Spowoduje to utworzenie pliku cm.exewykonywalnego.This will create the executable file cm.exe.

  5. Uruchom cm.exe.Run cm.exe. SampleMethod Metoda przekazuje wartość 5 do pliku dll, który zwraca wartość pomnożoną przez 10.The SampleMethod method passes the value 5 to the DLL file, which returns the value multiplied by 10. Program tworzy następujące dane wyjściowe:The program produces the following output:

    SampleMethod() returns 50.
    

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#.For more information, see the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also