Das Schlüsselwort extern in C#

Muhammad Zeeshan 12 Oktober 2023
  1. extern in C#
  2. Wie extern in C# funktioniert
Das Schlüsselwort extern in C#

Im heutigen Artikel lernen wir die Funktionsweise des Schlüsselworts extern in C# kennen.

extern in C#

Das Deklarieren einer extern implementierten Methode erfolgt mit dem Modifikator extern. Bei der Verwendung von Interop-Diensten zum Aufrufen von nicht verwaltetem Code wird der Modifikator extern häufig in Verbindung mit dem Attribut DllImport verwendet.

In dieser Situation ist es notwendig, die Methode als statisch zu definieren.

Das Schlüsselwort extern kann auch verwendet werden, um einen externen Assembly-Alias ​​zu erstellen, wodurch mehrere Versionen derselben Komponente innerhalb einer einzigen Assembly referenziert werden können.

Es ist nicht akzeptabel, ein einzelnes Mitglied gleichzeitig mit den Modifikatoren abstract und extern zu ändern. Wenn Sie den Modifikator abstract verwenden, zeigt dies an, dass die Methodenimplementierung nicht in der Klasse bereitgestellt wird, im Gegensatz zur Verwendung des Modifikators extern, was darauf hindeutet, dass sich die Methodenimplementierung außerhalb des C#-Codes befindet.

Wie extern in C# funktioniert

Es wird vereinbart, dass eine Methode als externe Methode gilt, wenn ihre Deklaration den Modifikator extern enthält. Die Implementierung externer Methoden findet oft außerhalb von C# statt und verwendet eine andere Programmiersprache.

Da eine externe Methodendeklaration keine eigentliche Implementierung enthält, besteht der Methodenkörper einer externen Methode aus einem einzelnen Semikolon. Es besteht die Möglichkeit, dass eine externe Methode nicht generisch ist.

Der Modifikator extern wird oft in Verbindung mit einer DllImport-Eigenschaft verwendet. Diese Kombination erlaubt Dynamic Link Libraries oder DLLs, Methoden aus externen Modulen einzubinden.

Es besteht die Möglichkeit, dass die Ausführungsumgebung zusätzliche Techniken unterstützt, die es ermöglichen, Implementierungen externer Methoden anzubieten. Wenn eine externe Methode eine DllImport-Eigenschaft hat, muss die Methodendeklaration auch einen statischen Modifikator haben, um korrekt zu funktionieren.

Syntax:

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

Beispiel:

In diesem Beispiel können wir externe Aliase verwenden, um Funktionen zu importieren, und diese Funktionen dann entsprechend verwenden.

Ein einzelner vollständig qualifizierter Name kann sich auf zwei Typen beziehen, wenn ein externer alias verwendet wird. Wenn zwei Entitäten den gleichen vollqualifizierten Namen haben, sind die Angabe des namespace und des Typs names identisch.

Dies ist etwas, das nur stattfinden kann, wenn die beiden Arten aus zwei getrennten Versammlungen stammen.

  1. Erste Bibliothek kompiliert zu info1.dll

    namespace information {
      public class info {}
    }
    
  2. Zweite Bibliothek kompiliert zu info2.dll

    namespace information {
      public class info {}
    }
    
  3. Das Folgende ist ein Beispiel für eine Anwendung, die die Dateien info1.dll und info2.dll verwendet.

    using info;
    class Test {
      static void Main() {
        information i = new information();
      }
    }
    
  1. Aufgrund von Unklarheiten in den information kann das Gesuch nicht erstellt werden. In dieser Situation kann die Unsicherheit unter Verwendung von extern Aliasnamen beseitigt werden.

    Sie müssen zuerst die von der Anwendung verwendete .csproj-Datei ändern und jeder Referenz ihren eindeutigen alias geben.

    <ItemGroup>
    <Reference Include="info1">
    <Aliases>i1</Aliases>
    </Reference>
    <Reference Include="info2">
    <Aliases>i2</Aliases>
    </Reference>
    </ItemGroup>
    
  2. Verwenden Sie die Alias-Direktive extern als letzten Schritt im Prozess.

    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