Überblick über C#A Tour of the C# Language

C# (Aussprache „C Sharp“) ist eine einfache, moderne, objektorientierte und typsichere Programmiersprache.C# (pronounced "See Sharp") is a simple, modern, object-oriented, and type-safe programming language. C# hat seine Wurzeln in der C-Sprachenfamilie und ist Programmierern, die mit C, C++, Java und JavaScript arbeiten, sofort vertraut.C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers.

C# ist eine objektorientierte Sprache, umfasst allerdings auch Unterstützung für eine komponentenorientierte Programmierung.C# is an object-oriented language, but C# further includes support for component-oriented programming. Die Softwareentwicklung von heute beruht zunehmend auf Softwarekomponenten in Form von eigenständigen und selbstbeschreibenden Funktionspaketen.Contemporary software design increasingly relies on software components in the form of self-contained and self-describing packages of functionality. Wichtig bei solchen Komponenten ist, dass sie für ein Programmiermodell mit Eigenschaften, Methoden und Ereignissen stehen. Sie verfügen über Attribute, die deklarative Informationen zur Komponente bereitstellen, und lassen sich in ihre eigene Dokumentation integrieren.Key to such components is that they present a programming model with properties, methods, and events; they have attributes that provide declarative information about the component; and they incorporate their own documentation. C# bietet Sprachkonstrukte zur direkten Unterstützung für diese Konzepte, wodurch C# zu einer sehr natürlichen Sprache wird, in der Softwarekomponenten erstellt und verwendet werden.C# provides language constructs to support directly these concepts, making C# a very natural language in which to create and use software components.

Mehrere C#-Funktionen helfen beim Entwickeln stabiler und dauerhafter Anwendungen: Automatische Speicherbereinigung fordert automatisch Arbeitsspeicher zurück, der von nicht reagierenden und nicht verwendeten Objekten blockiert wird. Ausnahmebehandlung bietet einen strukturierten und erweiterbaren Ansatz zur Fehlererkennung und Wiederherstellung. Die typsichere Gestaltung der Sprache macht das Lesen in nicht initialisierten Variablen, das Indizieren von Arrays jenseits der Grenzen oder das Durchführen nicht geprüfter Typumwandlungen unmöglich.Several C# features aid in the construction of robust and durable applications: Garbage collection automatically reclaims memory occupied by unreachable unused objects; exception handling provides a structured and extensible approach to error detection and recovery; and the type-safe design of the language makes it impossible to read from uninitialized variables, to index arrays beyond their bounds, or to perform unchecked type casts.

C# verfügt über ein einheitliches Typsystem.C# has a unified type system. Alle C#-Typen, einschließlich primitiver Typen wie int und double, erben von einem einzelnen object-Stammtyp.All C# types, including primitive types such as int and double, inherit from a single root object type. Daher verwenden alle Typen einen Satz allgemeiner Vorgänge, und Werte eines beliebigen Typs können gespeichert, übertragen und konsistent ausgeführt werden.Thus, all types share a set of common operations, and values of any type can be stored, transported, and operated upon in a consistent manner. Darüber hinaus unterstützt C# benutzerdefinierte Verweistypen und Werttypen und ermöglicht so die dynamische Zuordnung von Objekten sowie die Inlinespeicherung einfacher Strukturen.Furthermore, C# supports both user-defined reference types and value types, allowing dynamic allocation of objects as well as in-line storage of lightweight structures.

Um sicherzustellen, dass C#-Programme und -Bibliotheken im Lauf der Zeit kompatibel weiterentwickelt werden können, wurde bei der Entwicklung von C# viel Wert auf Versionsverwaltung gelegt.To ensure that C# programs and libraries can evolve over time in a compatible manner, much emphasis has been placed on versioning in C#’s design. Viele Programmiersprachen schenken diesem Problem wenig Beachtung, und in dieser Sprache geschriebene Programme stürzen daher häufiger als notwendig ab, wenn neuere Versionen abhängiger Bibliotheken eingeführt werden.Many programming languages pay little attention to this issue, and, as a result, programs written in those languages break more often than necessary when newer versions of dependent libraries are introduced. Zu den Aspekten der Entwicklung von C#, die direkt von Überlegungen bei der Versionskontrolle beeinflusst wurden, gehören die separaten virtual- und override-Modifizierer, die Regeln für die Überladungsauflösung und die Unterstützung für explizite Schnittstellenmember-Deklarationen.Aspects of C#’s design that were directly influenced by versioning considerations include the separate virtual and override modifiers, the rules for method overload resolution, and support for explicit interface member declarations.

Hello WorldHello world

Das Programm „Hello, World“ wird für gewöhnlich zur Einführung einer Programmiersprache verwendet.The "Hello, World" program is traditionally used to introduce a programming language. Hier ist es in C#:Here it is in C#:

using System;
class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

C#-Quelldateien weisen in der Regel die Dateierweiterung .cs auf.C# source files typically have the file extension .cs. Unter der Annahme, dass das Programm „Hello, World“ in der Datei hello.cs gespeichert ist, kann das Programm möglicherweise über die Befehlszeile kompiliert werden:Assuming that the "Hello, World" program is stored in the file hello.cs, the program might be compiled using the command line:

csc hello.cs

Dadurch wird eine ausführbare Assembly mit der Bezeichnung „hello.exe“ generiert.which produces an executable assembly named hello.exe. Die Ausgabe, die von dieser Anwendung generiert wird, wenn sie ausgeführt wird:The output produced by this application when it is run is:

Hello, World

Wichtig

Der csc-Befehl wird für das vollständige Framework kompiliert und ist möglicherweise nicht auf allen Plattformen verfügbar.The csc command compiles for the full framework, and may not be available on all platforms.

Das Programm „Hello, World“ wird mit einer using-Richtlinie gestartet, die auf den System-Namespace verweist.The "Hello, World" program starts with a using directive that references the System namespace. Namespaces bieten eine hierarchische Möglichkeit zum Organisieren von C#-Programmen und -Bibliotheken.Namespaces provide a hierarchical means of organizing C# programs and libraries. Namespaces enthalten Typen und andere Namespaces. Beispiel: Der System-Namespace enthält eine Reihe von Typen, wie etwa die Console-Klasse, auf die im Programm verwiesen wird, und eine Reihe anderer Namespaces, wie etwa IO und Collections.Namespaces contain types and other namespaces—for example, the System namespace contains a number of types, such as the Console class referenced in the program, and a number of other namespaces, such as IO and Collections. Eine using-Richtlinie, die auf einen bestimmten Namespace verweist, ermöglicht die nicht qualifizierte Nutzung der Typen, die Member dieses Namespace sind.A using directive that references a given namespace enables unqualified use of the types that are members of that namespace. Aufgrund der using-Direktive kann das Programm Console.WriteLine als Abkürzung für System.Console.WriteLine verwenden.Because of the using directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine.

Die Hello-Klasse, die vom Programm „Hello, World“ deklariert wird, verfügt über einen einzelnen Member: die Main-Methode.The Hello class declared by the "Hello, World" program has a single member, the method named Main. Die Main-Methode wird mit dem static-Modifizierer deklariert.The Main method is declared with the static modifier. Auch wenn Instanzmethoden mit dem Schlüsselwort this auf eine bestimmte einschließende Objektinstanz verweisen können, agieren statische Methoden ohne Verweis auf ein bestimmtes Objekt.While instance methods can reference a particular enclosing object instance using the keyword this, static methods operate without reference to a particular object. Gemäß der Konvention fungiert eine statische Methode mit der Bezeichnung Main als Einstiegspunkt eines Programms.By convention, a static method named Main serves as the entry point of a program.

Die Ausgabe des Programms wird anhand der WriteLine-Methode der Console-Klasse im System-Namespace generiert.The output of the program is produced by the WriteLine method of the Console class in the System namespace. Diese Klasse wird anhand der Standardklassenbibliotheken bereitgestellt, auf die standardmäßig automatisch vom Compiler verwiesen wird.This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler.

Es gibt noch viel mehr über C# zu erfahren.There's a lot more to learn about C#. Die folgenden Themen bieten eine Übersicht über die Elemente der C#-Sprache.The following topics provide an overview of the elements of the C# language. Diese Übersichten bieten grundlegende Informationen zu allen Elementen der Sprache und die erforderlichen Informationen zum tieferen Eintauchen in die Elemente der C#-Sprache:These overviews will provide basic information about all elements of the language and give you the information necessary to dive deeper into elements of the C# language:

  • ProgrammstrukturProgram Structure
    • Lernen Sie die organisatorischen Schlüsselkonzepte in der C#-Sprache kennen: Programme, Namespaces, Typen, Member und Assemblys.Learn the key organizational concepts in the C# language: programs, namespaces, types, members, and assemblies.
  • Typen und VariablenTypes and Variables
    • Erfahren Sie mehr über Werttypen, Verweistypen und Variablen in der C#-Sprache.Learn about value types, reference types, and variables in the C# language.
  • AusdrückeExpressions
    • Ausdrücke bestehen aus Operanden und Operatoren.Expressions are constructed from operands and operators. Ausdrücke generieren einen Wert.Expressions produce a value.
  • AnweisungenStatements
    • Sie verwenden Anweisungen, um die Aktionen eines Programms auszudrücken.You use statements to express the actions of a program.
  • Klassen und ObjekteClasses and objects
    • Klassen sind die grundlegendsten der C#-Typen.Classes are the most fundamental of C#'s types. Objekte sind Instanzen einer Klasse.Objects are instances of a class. Klassen werden mit Membern erstellt, die auch in diesem Thema behandelt werden.Classes are built using members, which are also covered in this topic.
  • StrukturenStructs
    • Strukturen sind Datenstrukturen, bei denen es sich im Gegensatz zu Klassen um Werttypen handelt.Structs are data structures that, unlike classes, are value types.
  • ArraysArrays
    • Ein Array ist eine Datenstruktur, die eine Anzahl von Variablen enthält, auf die über berechnete Indizes zugegriffen wird.An array is a data structure that contains a number of variables that are accessed through computed indices.
  • SchnittstellenInterfaces
    • Eine Schnittstelle definiert einen Vertrag, der von Klassen und Strukturen implementiert werden kann.An interface defines a contract that can be implemented by classes and structs. Eine Schnittstelle kann Methoden, Eigenschaften, Ereignisse und Indexer enthalten.An interface can contain methods, properties, events, and indexers. Eine Schnittstelle stellt keine Implementierungen der von ihr definierten Member bereit. Sie gibt lediglich die Member an, die von Klassen oder Strukturen bereitgestellt werden müssen, die die Schnittstelle implementieren.An interface does not provide implementations of the members it defines—it merely specifies the members that must be supplied by classes or structs that implement the interface.
  • EnumerationenEnums
    • Ein Enumerationstyp ist ein unverwechselbarer Werttyp mit einem Satz benannter Konstanten.An enum type is a distinct value type with a set of named constants.
  • DelegatenDelegates
    • Ein Delegattyp stellt Verweise auf Methoden mit einer bestimmten Parameterliste und dem Rückgabetyp dar.A delegate type represents references to methods with a particular parameter list and return type. Delegate ermöglichen die Behandlung von Methoden als Entitäten, die Variablen zugewiesen und als Parameter übergeben werden können.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. Delegate ähneln dem Konzept von Funktionszeigern, die Sie in einigen anderen Sprachen finden. Im Gegensatz zu Funktionszeigern sind Delegate allerdings objektorientiert und typsicher.Delegates are similar to the concept of function pointers found in some other languages, but unlike function pointers, delegates are object-oriented and type-safe.
  • AttributeAttributes
    • Attribute ermöglichen Programmen das Angeben zusätzlicher deklarativer Informationen zu Typen, Member und andere Entitäten.Attributes enable programs to specify additional declarative information about types, members, and other entities.