extern (справочник по C#)extern (C# Reference)

Модификатор extern используется для объявления метода с внешней реализацией.The extern modifier is used to declare a method that is implemented externally. При применении служб взаимодействия для вызова неуправляемого кода модификатор extern обычно используется с атрибутом DllImport.A common use of the extern modifier is with the DllImport attribute when you are using Interop services to call into unmanaged code. В этом случае также необходимо объявить метод как static в соответствии со следующим примером: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 может также определять внешний псевдоним сборки, который позволяет ссылаться на разные версии одного компонента из одной сборки.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. Дополнительные сведения см. в разделе Псевдоним extern.For more information, see extern alias.

Совместное использование модификаторов abstract и extern для изменения одного члена недопустимо.It is an error to use the abstract and extern modifiers together to modify the same member. Использование модификатора extern означает, что метод реализуется вне кода C#, а применение модификатора abstract указывает на то, что в данном классе реализация метода не обеспечивается.Using 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.

В C# ключевое слово extern имеет более ограниченное применение, чем в C++.The extern keyword has more limited uses in C# than in C++. Сравнительные характеристики использования этого ключевого слова в C# и в C++ см. в разделе "Использование extern для указания компоновки" Справочника по языку C++.To compare the C# keyword with the C++ keyword, see Using extern to Specify Linkage in the C++ Language Reference.

Пример 1Example 1

В этом примере программа получает от пользователя строку и отображает ее в окне сообщения.In this example, the program receives a string from the user and displays it inside a message box. В этой программе используется метод MessageBox, импортированный из библиотеки 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);
    }

}

Пример 2Example 2

В этом примере показана программа C#, в которой вызывается библиотека C (собственная библиотека DLL).This example illustrates a C# program that calls into a C library (a native DLL).

  1. Создайте следующий файл C и назовите его cmdll.c.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. Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл cmdll.c, введя в командной строке cl -LD cmdll.c.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. В том же каталоге создайте следующий файл C# и назовите его cm.cs.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. Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл cm.cs, введя: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 (для командной строки x64) — или — csc -platform:x86 cm.cs (для командной строки x32)csc cm.cs (for the x64 command prompt) —or— csc -platform:x86 cm.cs (for the x32 command prompt)

    При этом будет создан исполняемый файл cm.exe.This will create the executable file cm.exe.

  5. Запустите cm.exe.Run cm.exe. Метод SampleMethod передает значение 5 в файл DLL, который возвращает значение, умноженное на 10.The SampleMethod method passes the value 5 to the DLL file, which returns the value multiplied by 10. Программа выдает следующие результаты.The program produces the following output:

    SampleMethod() returns 50.
    

Спецификация языка C#C# language specification

Дополнительные сведения см. в спецификации языка C#.For more information, see the C# Language Specification. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.The language specification is the definitive source for C# syntax and usage.

См. такжеSee also