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 キーワードでは、外部アセンブリのエイリアスも定義できます。これにより、単一アセンブリ内から 1 つのコンポーネントの複数バージョンを参照できます。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.

extern キーワードの C# での用法は、C++ の場合よりも制限されています。The extern keyword has more limited uses in C# than in C++. C# のキーワードと C++ のキーワードを比較するには、C++ 言語リファレンスの「extern を使用したリンケージの指定」を参照してください。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. このプログラムは、User32.dll ライブラリからインポートされた MessageBox メソッドを使用します。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 ライブラリ (ネイティブ DLL) を呼び出す C# プログラムを示しています。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 コマンド プロンプト ウィンドウを開き、コマンド プロンプトで「cl -LD cmdll.c」と入力して、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 メソッドは、DLL ファイルに値 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