Le mot-clé extern en C#

Muhammad Zeeshan 12 octobre 2023
  1. extern en C#
  2. Comment extern fonctionne en C#
Le mot-clé extern en C#

Dans l’article d’aujourd’hui, nous allons apprendre la fonctionnalité du mot-clé extern en C#.

extern en C#

La déclaration d’une méthode implémentée en externe se fait à l’aide du modificateur extern. Lors de l’utilisation des services Interop pour appeler du code non géré, le modificateur extern est souvent utilisé conjointement avec l’attribut DllImport.

Il faut définir la méthode comme static dans cette situation.

Le mot-clé extern peut également être utilisé pour construire un alias d’assemblage externe, permettant de référencer plusieurs versions d’un même composant au sein d’un même assemblage.

Modifier un seul membre en utilisant simultanément les modificateurs abstract et extern est inacceptable. Lorsque vous utilisez le modificateur abstract, il indique que l’implémentation de la méthode n’est pas fournie dans la classe, contrairement à lorsque vous utilisez le modificateur extern qui suggère que l’implémentation de la méthode est située en dehors du code C#.

Comment extern fonctionne en C#

Il est convenu qu’une méthode est considérée comme une méthode externe si sa déclaration contient le modificateur extern. L’implémentation de méthodes externes a souvent lieu en dehors de C# et utilise un langage de programmation différent.

Étant donné qu’une déclaration de méthode externe n’inclut aucune implémentation réelle, le corps de méthode d’une méthode externe comprend un seul point-virgule. Il est possible qu’une méthode extérieure ne soit pas générique.

Le modificateur extern est souvent utilisé en conjonction avec une propriété DllImport. Cette combinaison permet aux Dynamic Link Libraries ou DLLs d’intégrer des méthodes issues de modules externes.

Il est possible que l’environnement d’exécution supporte des techniques supplémentaires permettant d’offrir des implémentations de méthodes externes. Lorsqu’une méthode externe possède une propriété DllImport, la déclaration de la méthode doit également posséder un modificateur static pour fonctionner correctement.

Syntaxe:

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

Exemple:

Dans cet exemple, nous pouvons utiliser des alias extern pour importer des fonctionnalités, puis utiliser ces fonctionnalités de manière appropriée.

Un même nom pleinement qualifié peut faire référence à deux types lors de l’utilisation d’un alias externe. Lorsque deux entités ont le même nom pleinement qualifié, l’indication namespace et le type names sont identiques.

C’est quelque chose qui ne peut avoir lieu que lorsque les deux genres proviennent de deux assemblages distincts.

  1. Première bibliothèque compilée en info1.dll

    namespace information {
      public class info {}
    }
    
  2. Deuxième bibliothèque compilée en info2.dll

    namespace information {
      public class info {}
    }
    
  3. Voici un exemple d’application qui utilise les fichiers info1.dll et info2.dll.

    using info;
    class Test {
      static void Main() {
        information i = new information();
      }
    }
    
  1. En raison du manque de clarté dans les information, la candidature ne peut pas être compilée. Dans cette situation, l’incertitude peut être levée à l’aide d’alias extern.

    Vous devez d’abord changer le fichier .csproj utilisé par l’application et donner à chaque référence son alias distinct.

    <ItemGroup>
    <Reference Include="info1">
    <Aliases>i1</Aliases>
    </Reference>
    <Reference Include="info2">
    <Aliases>i2</Aliases>
    </Reference>
    </ItemGroup>
    
  2. Utilisez la directive d’alias extern comme dernière étape du processus.

    extern alias i1;
    extern alias i2;
    
    class Test {
      static void Main() {
        i1.information.info first = new i1.information.info();
        i2.information.info second = new i2.information.info();
      }
    }
    
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn