Partager via


extern (référence C#)

Utilisez le extern modificateur pour déclarer une méthode implémentée en externe. L’utilisation courante du extern modificateur est associée à l’attribut DllImport lorsque vous utilisez des services Interop pour appeler du code non managé. Dans ce cas, vous devez également déclarer la méthode comme staticindiqué dans l’exemple suivant :

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

Vous pouvez également utiliser le extern mot clé pour définir un alias d’assembly externe. À l’aide de cet alias, vous pouvez référencer différentes versions du même composant à partir d’un seul assembly. Pour plus d’informations, consultez extern alias.

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

Il s’agit d’une erreur d’utilisation des modificateurs et externabstraits pour modifier le même membre. L’utilisation du extern modificateur signifie que la méthode est implémentée en dehors du code C#, tandis que l’utilisation du abstract modificateur signifie que l’implémentation de la méthode n’est pas fournie dans la classe.

Le extern mot clé a des utilisations plus limitées en C# que dans C++. Pour comparer son utilisation dans C# et C++, consultez : Utilisation d'externe pour spécifier la liaison dans le Guide de référence du langage C++.

Dans cet exemple, le programme reçoit une chaîne provenant de l’utilisateur et l’affiche dans une boîte de message. Le programme utilise la méthode MessageBox importée de la bibliothèque 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);
    }
}

Cet exemple illustre un programme C# qui fait appel à une bibliothèque C (une DLL native).

  1. Créez le fichier C suivant et nommez-le cmdll.c :

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Ouvrez une fenêtre d’invite de commandes Visual Studio x64 (ou x86) Native Tools à partir du répertoire d’installation de Visual Studio et compilez le cmdll.c fichier en tapant cl -LD cmdll.c à l’invite de commandes.

  3. Dans le même répertoire, créez le fichier C# suivant et nommez-le 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. Ouvrez une fenêtre d’invite de commandes Visual Studio x64 (ou x86) Native Tools à partir du répertoire d’installation de Visual Studio et compilez le cm.cs fichier en tapant :

    csc cm.cs (pour l’invite de commandes x64) — ou — csc -platform :x86 cm.cs (pour l’invite de commandes x86)

    Cette commande crée le fichier cm.exeexécutable .

  5. Exécuter cm.exe. La méthode SampleMethod passe la valeur 5 au fichier DLL, qui retourne la valeur multipliée par 10. Le programme génère la sortie suivante :

    SampleMethod() returns 50.
    

spécification du langage C#

Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi