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.
-
Erste Bibliothek kompiliert zu
info1.dll
namespace information { public class info {} }
-
Zweite Bibliothek kompiliert zu
info2.dll
namespace information { public class info {} }
-
Das Folgende ist ein Beispiel für eine Anwendung, die die Dateien
info1.dll
undinfo2.dll
verwendet.using info; class Test { static void Main() { information i = new information(); } }
-
Aufgrund von Unklarheiten in den
information
kann das Gesuch nicht erstellt werden. In dieser Situation kann die Unsicherheit unter Verwendung vonextern
Aliasnamen beseitigt werden.Sie müssen zuerst die von der Anwendung verwendete
.csproj
-Datei ändern und jeder Referenz ihren eindeutigenalias
geben.<ItemGroup> <Reference Include="info1"> <Aliases>i1</Aliases> </Reference> <Reference Include="info2"> <Aliases>i2</Aliases> </Reference> </ItemGroup>
-
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(); } }
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