Überblick über C#A tour of the C# language

C# (Aussprache „C Sharp“) ist eine moderne, objektorientierte und typsichere Programmiersprache.C# (pronounced "See Sharp") is a 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.

Diese Einführung bietet einen Überblick über die wichtigsten Komponenten der Sprache in C# 8 und früheren Versionen.This tour provides an overview of the major components of the language in C# 8 and earlier. Wenn Sie die Sprache anhand von interaktiven Beispielen kennenlernen möchten, arbeiten Sie die Tutorials auf der Seite Einführung in C# durch.If you want to explore the language through interactive examples, try the introduction to C# tutorials.

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. Das wichtigste Merkmal dieser Komponenten ist, dass sie ein Programmiermodell mit Eigenschaften, Methoden und Ereignissen darstellen.Key to such components is that they present a programming model with properties, methods, and events. Sie besitzen Attribute, die deklarative Informationen zur Komponente bereitstellen.They have attributes that provide declarative information about the component. Sie enthalten eine eigene Dokumentation.They incorporate their own documentation. C# bietet Sprachkonstrukte zur direkten Unterstützung für diese Konzepte, was C# zu einer natürlichen Sprache macht, in der Softwarekomponenten erstellt und verwendet werden.C# provides language constructs to support directly these concepts, making C# a natural language in which to create and use software components.

Einige C#-Funktionen helfen beim Entwickeln stabiler und dauerhafter Anwendungen.Several C# features aid in the construction of robust and durable applications. Die Garbage Collection gibt automatisch Arbeitsspeicher frei, der von nicht erreichbaren und nicht verwendeten Objekten belegt wird.Garbage collection automatically reclaims memory occupied by unreachable unused objects. Die Ausnahmebehandlung bietet einen strukturierten und erweiterbaren Ansatz zur Fehlererkennung und Wiederherstellung.Exception handling provides a structured and extensible approach to error detection and recovery. Das typsichere Design der Sprache macht es unmöglich, nicht initialisierte Variablen auszulesen, Arrays über ihre Grenzen hinaus zu indizieren oder nicht überprüfte Typumwandlungen durchzuführen.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 berücksichtigen dieses Problem nur geringfügig.Many programming languages pay little attention to this issue. Deshalb stürzen in anderen Sprachen geschriebene Programme daher häufiger ab, wenn neuere Versionen abhängiger Bibliotheken eingeführt werden.As a result, programs written in those other 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.

In neueren Versionen wurden auch neue Programmierparadigmen in C# aufgenommen.In more recent versions, C# has embraced other programming paradigms. C# enthält jetzt Features, die Methoden für die funktionale Programmierung wie Lambdaausdrücke unterstützen.C# has included features that support functional programming techniques like lambda expressions. Andere neue Features unterstützen die Trennung von Daten und Algorithmen, z. B. der Musterabgleich.Other new features support separating data and algorithms, like pattern matching.

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. Laden Sie zunächst das .NET Core SDK herunter, und installieren Sie es, um dieses Programm zu erstellen.To create this program, first download and install the .NET Core SDK. Führen Sie dann den Befehl dotnet new console -o hello aus, um ein neues Programm und ein Buildskript zu erstellen.Then, execute the command dotnet new console -o hello to create a new program and a build script. Das Programm und das Buildskript befinden sich in den Dateien Program.cs bzw. hello.csproj.The program and build script are in the files Program.cs and hello.csproj, respectively. Sie können die Anwendung mit den run-Befehlen erstellen und ausführen:You build and run the application with the run commands:

cd hello
dotnet run

Das Programm erzeugt die folgende Ausgabe:The program produces the following output:

Hello, World!

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.

Elemente in C#Elements of the C# language

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 für tiefere Einblicke:These overviews provide basic information about all elements of the language and give you the information necessary to dive deeper:

  • 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.
  • 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 doesn't provide implementations of the members it defines—it merely specifies the members that must be supplied by classes or structs that implement the interface.
  • 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.

Hinweis

Diese Artikel gelten für C# 7.0 und höher.These articles apply to C# 7.0 and later. Einige Funktionen stehen in früheren Versionen möglicherweise nicht zur Verfügung.Some features may not be available in earlier versions.