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

Обновлен: Ноябрь 2007

Модификатор extern используется для объявления метода с внешней реализацией. Когда службы взаимодействия используются для вызова неуправляемого кода, модификатор extern обычно используется с атрибутом DllImport. В этом случае также необходимо объявить метод как static в соответствии со следующим примером:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
e59b22c5.alert_note(ru-ru,VS.90).gifПримечание.

Ключевое слово extern может также задавать псевдоним внешней сборки, который позволяет создавать в сборке ссылки на различные версии одного компонента. Дополнительные сведения см. в разделе Псевдоним extern (справочник по C#).

Совместное использование модификаторов abstract (Справочник по C#) и extern для изменения одного члена является недопустимым. Использование модификатора extern указывает на то, что метод реализуется вне кода C#, а использование модификатора abstract указывает на то, что в данном классе реализация метода не предоставляется.

e59b22c5.alert_note(ru-ru,VS.90).gifПримечание.

Ключевое слово extern имеет более ограниченное применение по сравнению с C++. Для сравнения с ключевым словом C++ см. раздел Using extern to Specify Linkage в справочнике по языку C++.

Пример

В этом примере программа получает от пользователя строку и отображает ее в окне сообщения. В этой программе используется метод MessageBox, импортированный из библиотеки User32.dll.

//using System.Runtime.InteropServices;
class ExternTest
{
    [DllImport("User32.dll", CharSet=CharSet.Unicode)] 
    public static extern int MessageBox(int h, string m, string c, int type);

    static int Main()
    {
        string myString;
        Console.Write("Enter your message: ");
        myString = Console.ReadLine();
        return MessageBox(0, myString, "My Message Box", 0);
    }

}

В этом примере из программы C создается библиотека DLL, которая вызывается из программы C# в следующем примере.

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

В этом примере для пояснения применения extern используются два файла CM.cs и Cmdll.c. Файл C является внешней библиотекой DLL, созданной в примере 2, которая вызывается из программы C#.

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

SampleMethod() returns 50.

Заметки

Для построения проекта выполните следующие действия:

  • Скомпилируйте Cmdll.c в библиотеку DLL, используя командную строку Visual C++:

    cl /LD Cmdll.c

  • Скомпилируйте CM.cs, используя командную строку:

    csc CM.cs

При этом будет создан исполняемый файл CM.exe. При запуске этой программы метод SampleMethod передает значение 5 в файл DLL, который возвращает это значение, помноженное на 10.

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

Дополнительные сведения см. в следующем разделе документа Спецификация языка C#:

  • 10.6.7 Внешние методы

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Ключевые слова C#

Модификаторы (Справочник по C#)

System.Runtime.InteropServices.DllImportAttribute

Другие ресурсы

Справочник по C#