Allgemeines Typsystem und Common Language SpecificationCommon Type System & Common Language Specification

Diese im Kontext von .NET frei verwendeten Begriffe sind dennoch entscheidend für das Verständnis wie eine .NET-Implementierung die mehrsprachige Entwicklung ermöglicht, und wie diese Entwicklung erfolgt.Again, two terms that are freely used in the .NET world, they actually are crucial to understand how a .NET implementation enables multi-language development and to understand how it works.

Allgemeines TypsystemCommon Type System

Beachten Sie zunächst, dass eine .NET-Implementierung sprachunabhängig ist.To start from the beginning, remember that a .NET implementation is language agnostic. Dies bedeutet nicht nur, dass ein Programmierer Code in jeder Sprache schreiben kann, die in IL kompiliert werden kann.This doesn’t just mean that a programmer can write her code in any language that can be compiled to IL. Dies bedeutet auch, dass er in der Lage sein muss, mit Code zu interagieren, der in anderen Sprachen geschrieben ist, die in einer .NET-Implementierung verwendet werden können.It also means that she needs to be able to interact with code written in other languages that are able to be used on a .NET implementation.

Damit dies transparent erfolgen kann, ist eine allgemeine Methode zur Beschreibung aller unterstützten Typen erforderlich.In order to do this transparently, there has to be a common way to describe all supported types. Hierzu dient das allgemeine Typsystem (Common Type System, CTS).This is what the Common Type System (CTS) is in charge of doing. Es ist für verschiedene Zwecke bestimmt:It was made to do several things:

  • Einrichten eines Frameworks für die sprachübergreifende Ausführung.Establish a framework for cross-language execution.
  • Bereitstellen eines objektorientierten Modells zur Unterstützung der Implementierung verschiedener Sprachen in einer .NET-Implementierung.Provide an object-oriented model to support implementing various languages on a .NET implementation.
  • Definieren eines Satzes von Regeln, die alle Programmiersprachen bei der Arbeit mit Typen einhalten müssen.Define a set of rules that all languages must follow when it comes to working with types.
  • Bereitstellen einer Bibliothek, die die bei der Anwendungsentwicklung verwendeten grundlegenden primitiven Datentypen enthält (z.B. Boolean, Byte, Char usw.)Provide a library that contains the basic primitive types that are used in application development (such as, Boolean, Byte, Char etc.)

CTS definiert zwei Hauptarten von Typen, die unterstützt werden sollten: Verweis- und Werttypen.CTS defines two main kinds of types that should be supported: reference and value types. Ihre Namen weisen auf ihre Definitionen.Their names point to their definitions.

Verweistypenobjekte werden durch einen Verweis auf den tatsächlichen Wert des Objekts dargestellt; ein Verweis entspricht hier einem Zeiger in C/C++.Reference types’ objects are represented by a reference to the object’s actual value; a reference here is similar to a pointer in C/C++. Er verweist einfach auf einen Speicherbereich, in dem sich die Werte der Objekte befinden.It simply refers to a memory location where the objects’ values are. Dies hat einen tiefgreifenden Einfluss auf die Art der Verwendung dieser Typen.This has a profound impact on how these types are used. Wenn Sie einen Verweistyp einer Variablen zuweisen und dann z.B. die Variable einer Methode übergeben, werden Änderungen des Objekts im Hauptobjekt berücksichtigt; es findet kein Kopiervorgang statt.If you assign a reference type to a variable and then pass that variable into a method, for instance, any changes to the object will be reflected on the main object; there is no copying.

Werttypen sind das Gegenteil, wobei die Objekte durch ihre Werte dargestellt werden.Value types are the opposite, where the objects are represented by their values. Wenn Sie einer Variablen einen Werttyp zuweisen, kopieren Sie im Grunde einen Wert des Objekts.If you assign a value type to a variable, you are essentially copying a value of the object.

CTS definiert verschiedene Kategorien von Typen, jeweils mit ihrer spezifischen Semantik und Nutzung:CTS defines several categories of types, each with their specific semantics and usage:

  • KlassenClasses
  • StrukturenStructures
  • EnumerationenEnums
  • SchnittstellenInterfaces
  • DelegatenDelegates

CTS definiert auch alle anderen Eigenschaften der Typen, z.B. Zugriffsmodifizierer, welche Typmember gültig sind, wie Vererbung und Überladung funktionieren usw.CTS also defines all other properties of the types, such as access modifiers, what are valid type members, how inheritance and overloading works and so on. Leider ist es nicht möglich, in einem Einführungsartikel wie diesem einen dieser Aspekte ausführlich zu behandeln, aber Sie finden im Abschnitt Weitere Ressourcen am Ende Links zu ausführlicheren Dokumenten, die diese Themen behandeln.Unfortunately, going deep into any of those is beyond the scope of an introductory article such as this, but you can consult More resources section at the end for links to more in-depth content that covers these topics.

Common Language SpecificationCommon Language Specification

Um vollständige Interoperabilitätsszenarien zu aktivieren, müssen alle Objekte, die im Code erstellt werden, sich auf eine gewisse Gemeinsamkeit in den Sprachen verlassen, von denen sie verwendet werden (die ihre Aufrufer sind).To enable full interoperability scenarios, all objects that are created in code must rely on some commonality in the languages that are consuming them (are their callers). Da es zahlreiche verschiedene Sprachen gibt, legt .NET diese Gemeinsamkeiten in der sogenannten Common Language Specification (CLS) fest.Since there are numerous different languages, .NET has specified those commonalities in something called the Common Language Specification (CLS). Die CLS definiert einen Satz von Funktionen, die viele gängige Anwendungen benötigen.CLS defines a set of features that are needed by many common applications. Darüber hinaus bietet sie für jede Sprache, die in .NET implementiert wird, Anweisungen, was diese unterstützen muss.It also provides a sort of recipe for any language that is implemented on top of .NET on what it needs to support.

Die CLS ist eine Teilmenge des CTS.CLS is a subset of the CTS. Dies bedeutet, dass alle Regeln im CTS auch für die CLS gelten, es sei denn, die CLS-Regeln sind strikter.This means that all of the rules in the CTS also apply to the CLS, unless the CLS rules are more strict. Wenn eine Komponente nur gemäß der Regeln in der CLS erstellt wird, d.h., nur die CLS-Funktionen werden in der API verfügbar gemacht, gilt sie als CLS-kompatibel.If a component is built using only the rules in the CLS, that is, it exposes only the CLS features in its API, it is said to be CLS-compliant. Die <framework-librares> sind z.B. genau deshalb CLS-kompatibel, weil sie in allen von .NET unterstützten Sprachen übergreifend funktionieren müssen.For instance, the <framework-librares> are CLS-compliant precisely because they need to work across all of the languages that are supported on .NET.

Die im Abschnitt Weitere Ressourcen unten aufgelisteten Dokumente bieten Ihnen eine Übersicht über alle in der CLS enthaltenen Funktionen.You can consult the documents in the More Resources section below to get an overview of all the features in the CLS.

Weitere RessourcenMore resources