Werttypen (C#-Referenz)Value types (C# Reference)

Es gibt zwei Werttypen:There are two kinds of value types:

Hauptfunktionen von WerttypenMain features of value types

Eine Variable eines Werttyps enthält einen Wert des Typs.A variable of a value type contains a value of the type. Beispielsweise kann eine Variable von Typ int den 42-Wert enthalten.For example, a variable of the int type might contain the value 42. Dies unterscheidet sich von einer Variablen eines Referenztyps, die eine Referenz auf eine Instanz des Typs enthält, auch bekannt als Objekt.This differs from a variable of a reference type, which contains a reference to an instance of the type, also known as an object. Wenn Sie einer Variablen eines Werttyps einen neuen Wert zuweisen, wird der Wert kopiert.When you assign a new value to a variable of a value type, that value is copied. Wenn Sie einer Variablen eines Referenztyps einen neuen Wert zuweisen, wird die Referenz kopiert, nicht das Objekt selbst.When you assign a new value to a variable of a reference type, the reference is copied, not the object itself.

Alle Werttypen werden implizit von System.ValueType abgeleitet.All value types are derived implicitly from the System.ValueType.

Im Gegensatz zu Verweistypen können Sie von Werttypen keinen neuen ableiten.Unlike with reference types, you cannot derive a new type from a value type. Strukturen können aber wie Verweistypen Schnittstellen implementieren.However, like reference types, structs can implement interfaces.

Werttypvariablen können nicht standardmäßig null sein.Value type variables cannot be null by default. Variablen der entsprechenden Nullable-Werttypen können jedoch null sein.However, variables of the corresponding nullable value types can be null.

Jeder Werttyp hat einen impliziten parameterlosen Konstruktor, der den Standardwert dieses Typs initialisiert.Each value type has an implicit parameterless constructor that initializes the default value of that type. Informationen zu den Standardwerten von Werttypen finden Sie unter Tabelle für Standardwerte.For information about default values of value types, see Default values table.

Einfache TypenSimple types

Die einfachen Typen sind eine Reihe von vordefinierten Strukturtypen, die von C# bereitgestellt werden, und umfassen die folgenden Typen:The simple types are a set of predefined struct types provided by C# and comprise the following types:

Die einfachen Typen werden durch Schlüsselwörter identifiziert, aber diese Schlüsselwörter sind einfach Aliase für vordefinierte Strukturtypen im Namespace System.The simple types are identified through keywords, but these keywords are simply aliases for predefined struct types in the System namespace. int ist z.B. ein Alias von System.Int32.For example, int is an alias of System.Int32. Eine vollständige Liste der Aliase finden Sie unter Tabelle integrierter Typen.For a complete list of aliases, see Built-in types table.

Die einfachen Typen unterscheiden sich von anderen Strukturtypen dadurch, dass sie bestimmte zusätzliche Vorgänge ermöglichen:The simple types differ from other struct types in that they permit certain additional operations:

  • Einfache Typen können mithilfe von Literalen initialisiert werden.Simple types can be initialized by using literals. 'A' ist beispielsweise ein Literal vom Typ char, und 2001 ist ein Literal vom Typ int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

  • Konstanten der einfachen Typen können Sie mit dem Schlüsselwort const deklarieren.You can declare constants of the simple types with the const keyword. Es ist nicht möglich, Konstanten anderer Strukturtypen zu haben.It's not possible to have constants of other struct types.

  • Konstante Ausdrücke, deren Operanden alle einfache Typkonstanten sind, werden zur Kompilierzeit ausgewertet.Constant expressions, whose operands are all simple type constants, are evaluated at compile time.

Weitere Informationen finden Sie im Abschnitt Einfache Typen der C#-Sprachspezifikation.For more information, see the Simple types section of the C# language specification.

Initialisieren von WerttypenInitializing value types

Lokale Variablen in C# müssen vor ihrer Verwendung initialisiert werden.Local variables in C# must be initialized before they are used. Sie könnten eine lokale Variable beispielsweise ohne Initialisierung wie im folgenden Beispiel deklarieren:For example, you might declare a local variable without initialization as in the following example:

int myInt;

Sie können sie nicht verwenden, bis Sie sie initialisiert haben.You cannot use it before you initialize it. Sie können sie mit der folgenden Anweisung initialisieren:You can initialize it using the following statement:

myInt = new int();  // Invoke parameterless constructor for int type.

Diese Anweisung entspricht der folgenden Anweisung:This statement is equivalent to the following statement:

myInt = 0;         // Assign an initial value, 0 in this example.

Natürlich können Sie sich die Deklaration und die Initialisierung in derselben Anweisung befinden, wie in den folgenden Beispielen dargestellt:You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();

– oder ––or–

int myInt = 0;

Durch die Verwendung des Operators new wird der parameterlose Konstruktor des angegebenen Typs aufgerufen und der Variablen der Standardwert zugewiesen.Using the new operator calls the parameterless constructor of the specific type and assigns the default value to the variable. Im vorherigen Beispiel hat der parameterlose Konstruktor myInt den Wert 0 zugewiesen.In the preceding example, the parameterless constructor assigned the value 0 to myInt. Weitere Informationen zu Werten, die durch Aufrufen parameterloser Konstruktoren zugewiesen werden, finden Sie in der Tabelle für Standardwerte.For more information about values assigned by calling parameterless constructors, see Default values table.

Verwenden Sie bei benutzerdefinierten Typen new zum Aufrufen des parameterlosen Konstruktors.With user-defined types, use new to invoke the parameterless constructor. Die folgende Anweisung ruft beispielsweise den parameterlosen Konstruktor der Point-Struktur auf:For example, the following statement invokes the parameterless constructor of the Point struct:

var p = new Point(); // Invoke parameterless constructor for the struct.

Nach diesem Aufruf gilt die Struktur als definitiv zugewiesen. Das bedeutet, dass alle ihre Member mit ihren Standardwerten initialisiert werden.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Weitere Informationen zum new-Operator finden Sie unter neu.For more information about the new operator, see new.

Informationen zum Formatieren der Ausgabe von numerischen Typen finden Sie unter Tabelle zur Formatierung numerischer Ergebnisse.For information about formatting the output of numeric types, see Formatting numeric results table.

Siehe auchSee also