Übersicht über die Sprachinteroperabilität
Sprachinteroperabilität ist die Fähigkeit von Code, mit Code zu interagieren, der in einer anderen Programmiersprache geschrieben wurde. Die Sprachinteroperabilität kann zur maximalen Wiederverwendung von Code beitragen und so die Effizienz des Entwicklungsprozesses steigern.
Da Entwickler eine große Zahl verschiedener Tools und Technologien verwenden, die möglicherweise jeweils unterschiedliche Features und Typen unterstützen, war es schon immer schwierig, Sprachinteroperabilität sicherzustellen. Sprachcompiler und Tools für die Common Language Runtime profitieren jedoch von der in der Common Language Runtime eingebauten Unterstützung der Sprachinteroperabilität.
Die Common Language Runtime bietet die für Sprachinteroperabilität erforderliche Basis, indem ein allgemeines Typsystem angegeben und erzwungen wird und Metadaten bereitgestellt werden. Da alle mit Unterstützung für die Laufzeit entwickelten Sprachen beim Definieren und Verwenden von Typen dieselben Regeln für ein allgemeines Typsystem befolgen, ist die Verwendung von Typen sprachübergreifend konsistent. Metadaten ermöglichen die Sprachinteroperabilität durch Definieren eines einheitlichen Verfahrens zum Speichern und Abrufen von Informationen über Typen. Compiler speichern Typinformationen als Metadaten, und die Common Language Runtime verwendet diese Informationen zum Bereitstellen von Diensten während der Ausführung. Die Ausführung mehrsprachiger Anwendungen kann von der Laufzeit verwaltet werden, weil alle Typinformationen unabhängig von der Sprache des Codes auf die gleiche Weise gespeichert und abgerufen werden.
Verwalteter Code profitiert in folgender Hinsicht von der Unterstützung der Sprachinteroperabilität durch die Laufzeit:
Typen können die Implementierung von anderen Typen erben, Objekte an die Methoden anderer Typen übergeben und die in anderen Typen definierten Methoden aufrufen, unabhängig von der Sprache, in der die Typen implementiert werden.
Debugger, Profiler oder andere Tools müssen lediglich für eine Umgebung eingerichtet sein – für MSIL (Microsoft Intermediate Language) sowie für Metadaten für die Common Language Runtime – und können alle für die Laufzeit entwickelten Programmiersprachen unterstützen.
Die Behandlung von Ausnahmen ist sprachübergreifend konsistent. Wenn Code in einer Sprache eine Ausnahme auslöst, kann diese Ausnahme von einem in einer anderen Sprache geschriebenen Objekt abgefangen und erkannt werden.
Obwohl die Laufzeit sämtlichen verwalteten Code mit Unterstützung für die Ausführung in einer mehrsprachigen Umgebung bereitstellt, gibt es keine Garantie dafür, dass die Funktionalität der von Ihnen erstellten Typen in den von anderen Entwicklern verwendeten Programmiersprachen voll ausgenutzt werden kann. Dies ist vor allem deshalb der Fall, weil jeder für die Laufzeit entwickelte Sprachcompiler das Typsystem und die Metadaten verwendet, um den eigenen eindeutigen Satz an Sprachfeatures zu unterstützen. Wenn Sie nicht wissen, in welcher Sprache der Aufrufcode geschrieben wird, ist Ihnen in aller Regel auch nicht bekannt, ob der Aufrufer auf die von einer Komponente verfügbar gemachten Features zugreifen kann. Wenn die gewählte Sprache z. B. Ganzzahlen ohne Vorzeichen unterstützt, entwerfen Sie möglicherweise eine Methode mit einem Parameter des Typs UInt32. Diese Methode könnte aber in einer Sprache, die keine Ganzzahlen ohne Vorzeichen erkennt, nicht verwendet werden.
Um sicherzustellen, dass der verwaltete Code unabhängig von der Programmiersprache für alle Entwickler zugänglich ist, stellt .NET Framework die CLS (Common Language Specification) (CLS) bereit, die einen Basissatz von Sprachfeatures bereitstellt und Regeln für die Verwendung dieser Features definiert. Weitere Informationen zur CLS-Kompatibilität in Komponenten und Tools finden Sie unter Schreiben von CLS-kompatiblem Code.
Siehe auch
Konzepte
CLS (Common Language Specification)
Schreiben von CLS-kompatiblem Code
Weitere Ressourcen
Übersicht über .NET Framework
Allgemeines Typsystem
Metadaten und selbstbeschreibende Komponenten