ProgrammstrukturProgram Structure

Die organisatorischen Schlüsselkonzepte in C# sind: Programme, Namespaces, Typen, Member und Assemblys.The key organizational concepts in C# are programs, namespaces, types, members, and assemblies. C#-Programme bestehen aus mindestens einer Quelldatei.C# programs consist of one or more source files. Programme deklarieren Typen, die Member enthalten, und können in Namespaces organisiert werden.Programs declare types, which contain members and can be organized into namespaces. Klassen und Schnittstellen sind Beispiele für Typen.Classes and interfaces are examples of types. Felder, Methoden, Eigenschaften und Ereignisse sind Beispiele für Member.Fields, methods, properties, and events are examples of members. Wenn C#-Programme kompiliert werden, werden sie physisch in Assemblys verpackt.When C# programs are compiled, they are physically packaged into assemblies. Assemblys haben in der Regel die Erweiterung .exe oder .dll, je nachdem, ob sie Anwendungen oder Bibliotheken implementieren.Assemblies typically have the file extension .exe or .dll, depending on whether they implement applications or libraries, respectively.

Das Beispiel deklariert eine Klasse namens Stack in einem Namespace namens Acme.Collections:The example declares a class named Stack in a namespace called Acme.Collections:

using System;
namespace Acme.Collections
{
    public class Stack
    {
        Entry top;
        public void Push(object data) 
        {
            top = new Entry(top, data);
        }

        public object Pop() 
        {
            if (top == null)
            {
                throw new InvalidOperationException();
            }
            object result = top.data;
            top = top.next;
            return result;
        }
        
        class Entry
        {
            public Entry next;
            public object data;
            public Entry(Entry next, object data)
            {
                this.next = next;
                this.data = data;
            }
        }
    }
}

Der vollqualifizierte Name dieser Klasse ist Acme.Collections.Stack.The fully qualified name of this class is Acme.Collections.Stack. Die Klasse enthält mehrere Member: ein Feld mit dem Namen top, zwei Methoden mit dem Namen Push und Pop sowie eine geschachtelte Klasse mit dem Namen Entry.The class contains several members: a field named top, two methods named Push and Pop, and a nested class named Entry. Die Entry-Klasse enthält weitere drei Member: ein Feld mit dem Namen next, ein Feld mit dem Namen data und einen Konstruktor.The Entry class further contains three members: a field named next, a field named data, and a constructor. Vorausgesetzt, dass der Quellcode des Beispiels in der Datei acme.cs gespeichert wird, kompiliert die BefehlszeileAssuming that the source code of the example is stored in the file acme.cs, the command line

csc /t:library acme.cs

das Beispiel als Bibliothek (Code ohne Main-Einstiegspunkt) und erstellt eine Assembly mit dem Namen acme.dll.compiles the example as a library (code without a Main entry point) and produces an assembly named acme.dll.

Wichtig

Die Beispiele oben verwenden csc als C#-Befehlszeilencompiler.The examples above use csc as the command line C# compiler. Dieser Compiler ist eine ausführbare Windows-Datei.This compiler is a windows executable. Um C# auf anderen Plattformen zu verwenden, sollten Sie die Tools für .NET Core verwenden.To use C# across other platforms, you should use the tools for .NET Core. Das .NET Core-Ökosystem verwendet die dotnet-CLI zum Verwalten von Befehlszeilenbuilds.The .NET Core ecosystem uses the dotnet CLI to manage command line builds. Dies schließt das Verwalten von Abhängigkeiten und den Aufruf des C#-Compilers ein.This includes managing dependencies, and invoking the C# compiler. In diesem Tutorial finden Sie eine vollständige Beschreibung dieser Tools auf den von .NET Core unterstützten Plattformen.See this tutorial for a full description of those tools on the platforms supported by .NET Core.

Assemblys enthalten ausführbaren Code in Form von Zwischensprachenanweisungen (Intermediate Language, IL) und symbolischen Informationen in Form von Metadaten.Assemblies contain executable code in the form of Intermediate Language (IL) instructions, and symbolic information in the form of metadata. Vor der Ausführung wird der IL-Code in einer Assembly automatisch durch den Just-in-Time-Compiler (JIT) der .NET Common Language Runtime in prozessorspezifischen Code konvertiert.Before it is executed, the IL code in an assembly is automatically converted to processor-specific code by the Just-In-Time (JIT) compiler of .NET Common Language Runtime.

Da eine Assembly eine selbstbeschreibende Funktionseinheit mit Code und Metadaten ist, besteht in C# keine Notwendigkeit für #include-Direktiven und Headerdateien.Because an assembly is a self-describing unit of functionality containing both code and metadata, there is no need for #include directives and header files in C#. Die öffentlichen Typen und Member, die in einer bestimmten Assembly enthalten sind, werden einfach durch Verweisen auf die Assembly beim Kompilieren des Programms in einem C#-Programm verfügbar gemacht.The public types and members contained in a particular assembly are made available in a C# program simply by referencing that assembly when compiling the program. Dieses Programm verwendet z.B. die Acme.Collections.Stack-Klasse aus der acme.dll-Assembly:For example, this program uses the Acme.Collections.Stack class from the acme.dll assembly:

using System;
using Acme.Collections;
class Example
{
    static void Main() 
    {
        Stack s = new Stack();
        s.Push(1);
        s.Push(10);
        s.Push(100);
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
    }
}

Wenn das Programm beim Kompilieren von example.cs in der Datei example.cs gespeichert wird, kann mit der Compileroption „/r“ auf die Assembly „acme.dll“ verwiesen werden:If the program is stored in the file example.cs, when example.cs is compiled, the acme.dll assembly can be referenced using the compiler’s /r option:

csc /r:acme.dll example.cs

So wird eine ausführbare Assembly mit dem Namen example.exe erstellt, die bei Ausführung folgende Ausgabe erzeugt:This creates an executable assembly named example.exe, which, when run, produces the output:

100
10
1

In C# kann der Quelltext eines Programms in verschiedenen Quelldateien gespeichert werden.C# permits the source text of a program to be stored in several source files. Bei der Kompilierung eines C#-Programms mit mehreren Dateien werden alle Quelldateien zusammen verarbeitet, und die Quelldateien können frei aufeinander verweisen – vom Konzept her ist es so, als seien alle Quelldateien vor der Verarbeitung in einer einzigen großen Datei verkettet worden.When a multi-file C# program is compiled, all of the source files are processed together, and the source files can freely reference each other—conceptually, it is as if all the source files were concatenated into one large file before being processed. Vorwärtsdeklarationen sind in C# nie erforderlich, da die Reihenfolge der Deklaration mit wenigen Ausnahmen unbedeutend ist.Forward declarations are never needed in C# because, with very few exceptions, declaration order is insignificant. C# beschränkt eine Quelldatei weder auf die Deklaration eines einzigen öffentlichen Typs, noch muss der Name der Quelldatei mit einem in der Quelldatei deklarierten Typ übereinstimmen.C# does not limit a source file to declaring only one public type nor does it require the name of the source file to match a type declared in the source file.