Typen (C#-Programmierhandbuch)Types (C# Programming Guide)

Typen, Variablen und WerteTypes, Variables, and Values

C# ist eine stark typisierte Sprache.C# is a strongly-typed language. Jede Variable und jede Konstante verfügt über einen Typ, genau wie jeder Ausdruck, der zu einem Wert ausgewertet wird.Every variable and constant has a type, as does every expression that evaluates to a value. Jede Methodensignatur gibt für jeden Eingabeparameter und den Rückgabewert einen Typ an.Every method signature specifies a type for each input parameter and for the return value. In der .NET Framework-Klassenbibliothek sind integrierte numerische Typen sowie komplexere Typen definiert, die eine große Anzahl logischer Konstrukte darstellen, z. B. das Dateisystem, Netzwerkverbindungen, Auflistungen und Arrays von Objekten sowie Datumsangaben.The .NET Framework class library defines a set of built-in numeric types as well as more complex types that represent a wide variety of logical constructs, such as the file system, network connections, collections and arrays of objects, and dates. In einem typischen C#-Programm werden Typen aus der Klassenbibliothek sowie benutzerdefinierte Typen verwendet, die die Konzepte für das Problemfeld des Programms modellieren.A typical C# program uses types from the class library as well as user-defined types that model the concepts that are specific to the program's problem domain.

Folgende Informationen können in einem Typ gespeichert sein:The information stored in a type can include the following:

  • Der Speicherplatz, den eine Variable des Typs erfordertThe storage space that a variable of the type requires.

  • Die maximalen und minimalen Werte, die diese darstellen kannThe maximum and minimum values that it can represent.

  • Die enthaltenen Member (Methoden, Felder, Ereignisse usw.)The members (methods, fields, events, and so on) that it contains.

  • Der Basistyp, von dem geerbt wirdThe base type it inherits from.

  • Die Position, an der der Arbeitsspeicher für Variablen zur Laufzeit belegt wirdThe location where the memory for variables will be allocated at run time.

  • Die Arten von zulässigen VorgängenThe kinds of operations that are permitted.

Der Compiler verwendet Typinformationen, um sicherzustellen, dass alle im Code ausgeführten Vorgänge typsicher sind.The compiler uses type information to make sure that all operations that are performed in your code are type safe. Wenn Sie z.B. eine Variable vom Typ int deklarieren, können Sie mit dem Compiler die Variable für Additions- und Subtraktionsvorgänge verwenden.For example, if you declare a variable of type int, the compiler allows you to use the variable in addition and subtraction operations. Wenn Sie dieselben Vorgänge für eine Variable vom Typ bool ausführen möchten, generiert der Compiler einen Fehler, wie im folgenden Beispiel dargestellt:If you try to perform those same operations on a variable of type bool, the compiler generates an error, as shown in the following example:

int a = 5;             
int b = a + 2; //OK

bool test = true;
  
// Error. Operator '+' cannot be applied to operands of type 'int' and 'bool'.
int c = a + test;

Hinweis

C- und C++-Entwickler sollten beachten, dass in C# bool nicht in int konvertiert werden kann.C and C++ developers, notice that in C#, bool is not convertible to int.

Der Compiler bettet die Typinformationen als Metadaten in die ausführbare Datei ein.The compiler embeds the type information into the executable file as metadata. Die Common Language Runtime (CLR) verwendet diese Metadaten zur Laufzeit, um die Typsicherheit zu gewährleisten, wenn Speicherplatz belegt und freigegeben wird.The common language runtime (CLR) uses that metadata at run time to further guarantee type safety when it allocates and reclaims memory.

Angeben von Typen in VariablendeklarationenSpecifying Types in Variable Declarations

Wenn Sie eine Variable oder Konstante in einem Programm deklarieren, müssen Sie ihren Typ festlegen oder das var-Schlüsselwort verwenden, damit der Typ vom Compiler abgeleitet wird.When you declare a variable or constant in a program, you must either specify its type or use the var keyword to let the compiler infer the type. Im folgenden Beispiel werden einige Variablendeklarationen dargestellt, die sowohl integrierte numerische Typen als auch komplexe benutzerdefinierte Typen verwenden:The following example shows some variable declarations that use both built-in numeric types and complex user-defined types:

// Declaration only:
float temperature;
string name;
MyClass myClass;

// Declaration with initializers (four examples):
char firstLetter = 'C';
var limit = 3;
int[] source = { 0, 1, 2, 3, 4, 5 };
var query = from item in source
            where item <= limit
            select item;

Die Methodenparameter- und Rückgabewerttypen werden in der Methodensignatur angegeben.The types of method parameters and return values are specified in the method signature. Die folgende Signatur zeigt eine Methode, für die ein int als Eingabeargument benötigt wird und die eine Zeichenfolge zurückgibt:The following signature shows a method that requires an int as an input argument and returns a string:

public string GetName(int ID)
{
    if (ID < names.Length)
        return names[ID];
    else
        return String.Empty;
}
private string[] names = { "Spencer", "Sally", "Doug" };

Nachdem eine Variable deklariert wurde, kann sie nicht erneut mit einem neuen Typ deklariert werden. Außerdem kann ihr kein Wert zugewiesen werden, der nicht mit dem deklarierten Typ kompatibel ist.After a variable is declared, it cannot be re-declared with a new type, and it cannot be assigned a value that is not compatible with its declared type. Zum Beispiel können Sie eine int nicht deklarieren und dieser dann den booleschen Wert true zuweisen.For example, you cannot declare an int and then assign it a Boolean value of true. Werte können jedoch in andere Typen konvertiert werden, z. B., wenn diese neuen Variablen zugewiesen oder als Methodenargumente übergeben werden.However, values can be converted to other types, for example when they are assigned to new variables or passed as method arguments. Eine Typkonvertierung, die keinen Datenverlust verursacht, wird automatisch vom Compiler ausgeführt.A type conversion that does not cause data loss is performed automatically by the compiler. Eine Konvertierung, die möglicherweise Datenverlust verursacht, erfordert eine Umwandlung in den Quellcode.A conversion that might cause data loss requires a cast in the source code.

Weitere Informationen finden Sie unter Umwandlung und Typkonvertierungen.For more information, see Casting and Type Conversions.

Integrierte TypenBuilt-in Types

C# liefert einen Standardsatz mit integrierten numerischen Typen zur Darstellung von ganzen Zahlen, Gleitkommawerten, booleschen Ausdrücken, Textzeichen, Dezimalwerten und anderen Datentypen.C# provides a standard set of built-in numeric types to represent integers, floating point values, Boolean expressions, text characters, decimal values, and other types of data. Es gibt auch integrierte string-Typen und object-Typen.There are also built-in string and object types. Diese können Sie in jedem C#-Programm verwenden.These are available for you to use in any C# program. Weitere Informationen über die integrierten Typen finden Sie unter Referenztabellen für Typen.For more information about the built-in types, see Reference Tables for Types.

Benutzerdefinierte TypenCustom Types

Sie verwenden die Konstrukte struct, class, interface und enum, um eigene benutzerdefinierte Typen zu erstellen.You use the struct, class, interface, and enum constructs to create your own custom types. Die .NET Framework-Klassenbibliothek ist eine Auflistung benutzerdefinierter, von Microsoft bereitgestellter Typen, die Sie in Ihren eigenen Anwendungen verwenden können.The .NET Framework class library itself is a collection of custom types provided by Microsoft that you can use in your own applications. Standardmäßig sind die am häufigsten verwendeten Typen in der Klassenbibliothek in jedem C#-Programm verfügbar.By default, the most frequently used types in the class library are available in any C# program. Andere stehen nur zur Verfügung, wenn Sie ausdrücklich einen Projektverweis auf die Assembly hinzufügen, in der diese definiert sind.Others become available only when you explicitly add a project reference to the assembly in which they are defined. Wenn der Compiler über einen Verweis auf die Assembly verfügt, können Sie Variablen (und Konstanten) des in dieser Assembly deklarierten Typs im Quellcode deklarieren.After the compiler has a reference to the assembly, you can declare variables (and constants) of the types declared in that assembly in source code. Weitere Informationen finden Sie in der Dokumentation zur .NET Framework-Klassenbibliothek.For more information, see .NET Framework Class Library.

Das allgemeine TypsystemThe Common Type System

Mit zwei grundlegenden Punkten über das System der Typen in .NET Framework.NET Framework sollten Sie vertraut sein:It is important to understand two fundamental points about the type system in the .NET Framework.NET Framework:

  • Es unterstützt das Prinzip der Vererbung.It supports the principle of inheritance. Typen können von anderen Typen abgeleitet werden, die als Basistypen bezeichnet werden.Types can derive from other types, called base types. Der abgeleitete Typ erbt (mit einigen Beschränkungen) die Methoden, Eigenschaften und anderen Member des Basistyps.The derived type inherits (with some restrictions) the methods, properties, and other members of the base type. Der Basistyp kann wiederum von einem anderen Typ abgeleitet sein. In diesem Fall erbt der abgeleitete Typ die Member beider Basistypen in der Vererbungshierarchie.The base type can in turn derive from some other type, in which case the derived type inherits the members of both base types in its inheritance hierarchy. Alle Typen, einschließlich integrierter numerischer Typen, z. B. System.Int32 (C#-Schlüsselwort: int), werden letztendlich von einem einzelnen Basistyp abgeleitet, nämlich System.Object (C#-Schlüsselwort: object).All types, including built-in numeric types such as System.Int32 (C# keyword: int), derive ultimately from a single base type, which is System.Object (C# keyword: object). Diese einheitliche Typhierarchie wird als Allgemeines Typsystem (CTS) bezeichnet.This unified type hierarchy is called the Common Type System (CTS). Weitere Informationen zur Vererbung in C# finden Sie unter Vererbung.For more information about inheritance in C#, see Inheritance.

  • Jeder Typ im CTS ist als Werttyp oder Referenztyp definiert.Each type in the CTS is defined as either a value type or a reference type. Dies betrifft auch alle benutzerdefinierten Typen in der .NET Framework-Klassenbibliothek und Ihre eigenen benutzerdefinierten Typen.This includes all custom types in the .NET Framework class library and also your own user-defined types. Typen, die Sie mithilfe des struct-Schlüsselworts definieren, sind Werttypen. Alle integrierten numerischen Typen sind structs.Types that you define by using the struct keyword are value types; all the built-in numeric types are structs. Typen, die Sie mithilfe des class-Schlüsselworts definieren, sind Referenztypen.Types that you define by using the class keyword are reference types. Für Referenztypen und Werttypen gelten unterschiedliche Kompilierzeitregeln und ein anderes Laufzeitverhalten.Reference types and value types have different compile-time rules, and different run-time behavior.

In der folgenden Abbildung wird die Beziehung zwischen Werttypen und Referenztypen im CTS dargestellt.The following illustration shows the relationship between value types and reference types in the CTS.

Wert- und VerweistypenValue Types and Reference Types
Werttypen und Referenztypen im CTSValue types and reference types in the CTS

Hinweis

Wie Sie sehen, sind die am häufigsten verwendeten Typen alle im System-Namespace organisiert.You can see that the most commonly used types are all organized in the System namespace. Jedoch ist es für den Namespace, in dem ein Typ enthalten ist, unerheblich, ob es sich um einen Werttyp oder einen Referenztyp handelt.However, the namespace in which a type is contained has no relation to whether it is a value type or reference type.

WerttypenValue Types

Werttypen werden von System.ValueType abgeleitet, was wiederum von System.Object abgeleitet wird.Value types derive from System.ValueType, which derives from System.Object. Typen, die von System.ValueType abgeleitet werden, weisen ein besonderes Verhalten in der CLR auf.Types that derive from System.ValueType have special behavior in the CLR. Werttypvariablen enthalten die zugehörigen Werte direkt, d. h., der Speicher wird inline in dem Kontext belegt, in dem die Variable deklariert ist.Value type variables directly contain their values, which means that the memory is allocated inline in whatever context the variable is declared. Für Werttypvariablen erfolgt keine getrennte Heapzuordnung oder ein Mehraufwand für die Garbage Collection.There is no separate heap allocation or garbage collection overhead for value-type variables.

Zwei Kategorien von Werttypen sind verfügbar: struct und enum.There are two categories of value types: struct and enum.

Die integrierten numerischen Typen sind Strukturen und verfügen über Eigenschaften und Methoden, auf die Sie zugreifen können:The built-in numeric types are structs, and they have properties and methods that you can access:

// Static method on type Byte.  
byte b = Byte.MaxValue;  

Sie deklarieren diese jedoch und weisen ihnen Werte zu, als wären es einfache, nicht aggregierte Typen:But you declare and assign values to them as if they were simple non-aggregate types:

byte num = 0xA;  
int i = 5;  
char c = 'Z';  

Werttypen sind versiegelt (sealed). Dies bedeutet z.B., dass Sie keinen Typ von System.Int32 ableiten können und dass eine Struktur nicht von einer benutzerdefinierten Klasse oder Struktur erben kann, weil eine Struktur nur von System.ValueType erben kann.Value types are sealed, which means, for example, that you cannot derive a type from System.Int32, and you cannot define a struct to inherit from any user-defined class or struct because a struct can only inherit from System.ValueType. Eine Struktur kann jedoch eine oder mehrere Schnittstellen implementieren.However, a struct can implement one or more interfaces. Sie können einen Strukturtyp in einen Schnittstellentyp umwandeln. Dadurch wird ein Boxing-Vorgang gestartet, mit dem die Struktur von einem Referenztypobjekt im verwalteten Heap umschlossen wird.You can cast a struct type to an interface type; this causes a boxing operation to wrap the struct inside a reference type object on the managed heap. Boxing-Vorgänge werden auch ausgeführt, wenn Sie einen Werttyp an eine Methode übergeben, die System.Object als Eingabeparameter akzeptiert.Boxing operations occur when you pass a value type to a method that takes a System.Object as an input parameter. Weitere Informationen finden Sie unter Boxing und Unboxing.For more information, see Boxing and Unboxing.

Sie können das struct-Schlüsselwort verwenden, um eigene benutzerdefinierte Werttypen zu erstellen.You use the struct keyword to create your own custom value types. In der Regel wird eine Struktur als Container für einen kleinen Satz verwandter Variablen verwendet, wie im folgenden Beispiel dargestellt:Typically, a struct is used as a container for a small set of related variables, as shown in the following example:

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

Weitere Informationen über Strukturen finden Sie unter Strukturen.For more information about structs, see Structs. Weitere Informationen über Werttypen in .NET Framework.NET Framework finden Sie unter Allgemeines Typsystem.For more information about value types in the .NET Framework.NET Framework, see Common Type System.

Die andere Kategorie von Werttypen ist enum.The other category of value types is enum. Eine Enumeration definiert einen Satz benannter ganzzahliger Konstanten.An enum defines a set of named integral constants. So enthält z. B. die System.IO.FileMode-Enumeration in der .NET Framework-Klassenbibliothek einen Satz benannter ganzzahliger Konstanten, die festlegen, wie eine Datei geöffnet werden soll.For example, the System.IO.FileMode enumeration in the .NET Framework class library contains a set of named constant integers that specify how a file should be opened. Die Definition erfolgt wie im folgenden Beispiel:It is defined as shown in the following example:

public enum FileMode
{
    CreateNew = 1,
    Create = 2,
    Open = 3,
    OpenOrCreate = 4,
    Truncate = 5,
    Append = 6,
}

Die System.IO.FileMode.Create-Konstante besitzt den Wert 2.The System.IO.FileMode.Create constant has a value of 2. Der Name ist jedoch für Personen, die den Quellcode lesen, viel aussagekräftiger. Aus diesem Grund ist es besser, anstelle von Konstantenliteralen Enumerationen zu verwenden.However, the name is much more meaningful for humans reading the source code, and for that reason it is better to use enumerations instead of constant literal numbers. Weitere Informationen finden Sie unter System.IO.FileMode.For more information, see System.IO.FileMode.

Alle Enumerationen erben von System.Enum, was wiederum von System.ValueType erbt.All enums inherit from System.Enum, which inherits from System.ValueType. Alle Regeln, die für Strukturen gelten, gelten auch für Enumerationen.All the rules that apply to structs also apply to enums. Weitere Informationen über Enumerationen finden Sie unter Enumerationstypen.For more information about enums, see Enumeration Types.

VerweistypenReference Types

Ein Typ, der als Klasse, Delegat, Array oder Schnittstelle definiert ist, ist ein Referenztyp.A type that is defined as a class, delegate, array, or interface is a reference type. Wenn Sie zur Laufzeit eine Variable eines Referenztyps deklarieren, enthält die Variable zunächst den Wert NULL, bis Sie explizit eine Instanz des Objekts mithilfe des Operators new erstellen oder ihr ein Objekt zuweisen, das an anderer Stelle mithilfe des Operators new erstellt wurde, wie im folgenden Beispiel gezeigt wird:At run time, when you declare a variable of a reference type, the variable contains the value null until you explicitly create an instance of the object by using the new operator, or assign it an object that has been created elsewhere by using new, as shown in the following example:

MyClass mc = new MyClass();  
MyClass mc2 = mc;  

Eine Schnittstelle muss zusammen mit einem Klassenobjekt initialisiert werden, von dem sie implementiert wird.An interface must be initialized together with a class object that implements it. Wenn MyClass von IMyInterface implementiert wird, erstellen Sie eine Instanz von IMyInterface, wie im folgenden Beispiel dargestellt:If MyClass implements IMyInterface, you create an instance of IMyInterface as shown in the following example:

IMyInterface iface = new MyClass();  

Beim Erstellen des Objekts wird der Speicher im verwalteten Heap belegt. Die Variable enthält lediglich einen Verweis auf den Speicherort des Objekts.When the object is created, the memory is allocated on the managed heap, and the variable holds only a reference to the location of the object. Für Typen im verwalteten Heap ist Mehraufwand erforderlich, wenn sie zugewiesen werden und wenn sie von der automatischen Speicherverwaltungsfunktion der CLR freigegeben werden, was als Garbage Collection bezeichnet wird.Types on the managed heap require overhead both when they are allocated and when they are reclaimed by the automatic memory management functionality of the CLR, which is known as garbage collection. Die Garbage Collection ist jedoch auch stark optimiert. In den meisten Szenarien führt sie nicht zu einem Leistungsproblem.However, garbage collection is also highly optimized, and in most scenarios it does not create a performance issue. Weitere Informationen zur Garbage Collection finden Sie unter Automatische Speicherverwaltung.For more information about garbage collection, see Automatic Memory Management.

Alle Arrays sind Referenztypen, selbst wenn ihre Elemente Werttypen sind.All arrays are reference types, even if their elements are value types. Arrays werden implizit von der System.Array-Klasse abgeleitet. Sie deklarieren und verwenden diese jedoch mit der vereinfachten, von C# bereitgestellten Syntax, wie im folgenden Beispiel dargestellt:Arrays implicitly derive from the System.Array class, but you declare and use them with the simplified syntax that is provided by C#, as shown in the following example:

// Declare and initialize an array of integers.
int[] nums = { 1, 2, 3, 4, 5 };

// Access an instance property of System.Array.
int len = nums.Length;

Referenztypen bieten volle Vererbungsunterstützung.Reference types fully support inheritance. Wenn Sie eine Klasse erstellen, können Sie von einer anderen Schnittstelle oder Klasse erben, die nicht als versiegelt definiert ist. Andere Klassen können von Ihrer Klasse erben und die virtuellen Methoden überschreiben.When you create a class, you can inherit from any other interface or class that is not defined as sealed, and other classes can inherit from your class and override your virtual methods. Weitere Informationen zum Erstellen eigener Klassen finden Sie unter Klassen und Strukturen.For more information about how to create your own classes, see Classes and Structs. Weitere Informationen zur Vererbung und zu virtuellen Methoden finden Sie unter Vererbung.For more information about inheritance and virtual methods, see Inheritance.

Typen von LiteralwertenTypes of Literal Values

In C# erhalten Literalwerte einen Typ vom Compiler.In C#, literal values receive a type from the compiler. Sie können festlegen, wie ein numerisches Literal eingegeben werden soll, indem Sie am Ende der Zahl einen Buchstaben anfügen.You can specify how a numeric literal should be typed by appending a letter to the end of the number. Um z. B. anzugeben, dass der Wert 4.56 als Gleitkommazahl behandelt werden soll, fügen Sie nach der Zahl 4.56f ein "f" oder "F" an:For example, to specify that the value 4.56 should be treated as a float, append an "f" or "F" after the number: 4.56f. Wenn kein Buchstabe angefügt wird, leitet der Compiler einen Typ für das Literal ab.If no letter is appended, the compiler will infer a type for the literal. Weitere Informationen darüber, welche Typen mit Buchstabensuffixen angegeben werden können, finden Sie auf den Referenzseiten für einzelne Typen unter Werttypen.For more information about which types can be specified with letter suffixes, see the reference pages for individual types in Value Types.

Da Literale typisiert sind und alle Typen letztlich von System.Object abgeleitet werden, können Sie Code der folgenden Art erstellen und kompilieren:Because literals are typed, and all types derive ultimately from System.Object, you can write and compile code such as the following:

string s = "The answer is " + 5.ToString();
// Outputs: "The answer is 5"
Console.WriteLine(s);

Type type = 12345.GetType();
// Outputs: "System.Int32"
Console.WriteLine(type);

Generische TypenGeneric Types

Ein Typ kann mit einem oder mehreren Typparametern deklariert werden, die als Platzhalter für den eigentlichen Typ verwendet werden (den konkreten Typ), der vom Clientcode beim Erstellen einer Instanz des Typs bereitgestellt wird.A type can be declared with one or more type parameters that serve as a placeholder for the actual type (the concrete type) that client code will provide when it creates an instance of the type. Solche Typen werden als generische Typen bezeichnet.Such types are called generic types. Beispielsweise besitzt der .NET Framework-Typ System.Collections.Generic.List<T> einen Typparameter, dem üblicherweise der Name T gegeben wird. Beim Erstellen einer Instanz des Typs geben Sie die Objekte an, die die Liste enthalten soll, z. B. string:For example, the .NET Framework type System.Collections.Generic.List<T> has one type parameter that by convention is given the name T. When you create an instance of the type, you specify the type of the objects that the list will contain, for example, string:

List<string> stringList = new List<string>();
stringList.Add("String example");
// compile time error adding a type other than a string:
stringList.Add(4);

Die Verwendung des Typparameters ermöglicht die Wiederverwendung der Klasse für beliebige Elementtypen, ohne die einzelnen Elemente in object konvertieren zu müssen.The use of the type parameter makes it possible to reuse the same class to hold any type of element, without having to convert each element to object. Generische Auflistungsklassen werden als stark typisierte Auflistungen bezeichnet, weil der Compiler den jeweiligen Typ der Elemente in der Auflistung kennt und zur Kompilierzeit einen Fehler auslösen kann, wenn Sie beispielsweise versuchen, dem strings-Objekt im vorherigen Beispiel eine ganze Zahl hinzuzufügen.Generic collection classes are called strongly-typed collections because the compiler knows the specific type of the collection's elements and can raise an error at compile-time if, for example, you try to add an integer to the strings object in the previous example. Weitere Informationen finden Sie unter Generika.For more information, see Generics.

Implizite Typen, anonyme Typen und Typen, die NULL-Werte zulassenImplicit Types, Anonymous Types, and Nullable Types

Wie bereits zuvor erläutert, können Sie eine lokale Variable (jedoch keine Klassenmember) implizit eingeben, indem Sie das var-Schlüsselwort verwenden.As stated previously, you can implicitly type a local variable (but not class members) by using the var keyword. Die Variable erhält weiterhin zur Kompilierzeit einen Typ, aber der Typ wird vom Compiler bereitgestellt.The variable still receives a type at compile time, but the type is provided by the compiler. Weitere Informationen zu finden Sie unter Implizit typisierte lokale Variablen.For more information, see Implicitly Typed Local Variables.

In einigen Fällen ist es unpraktisch, einen benannten Typ für einfache Sätze verwandter Werte zu erstellen, die nicht außerhalb von Methodengrenzen gespeichert oder übergeben werden sollen.In some cases, it is inconvenient to create a named type for simple sets of related values that you do not intend to store or pass outside method boundaries. Sie können für diesen Zweck anonyme Typen erstellen.You can create anonymous types for this purpose. Weitere Informationen finden Sie unter Anonyme Typen.For more information, see Anonymous Types.

Gewöhnliche Werttypen können den Wert NULL nicht aufweisen.Ordinary value types cannot have a value of null. Sie können jedoch auf NULL festlegbare Werttypen erstellen, indem Sie nach dem Typ ein ? anfügen.However, you can create nullable value types by affixing a ? after the type. Zum Beispiel ist int? ein int-Typ, der auch den Wert NULL aufweisen kann.For example, int? is an int type that can also have the value null. Im CTS sind Typen, die NULL-Werte zulassen, Instanzen vom generischen Strukturtyp System.Nullable<T>.In the CTS, nullable types are instances of the generic struct type System.Nullable<T>. Typen, die NULL-Werte zulassen, sind besonders hilfreich, wenn Sie Daten an und aus Datenbanken übergeben, in denen die numerischen Werte NULL sein können.Nullable types are especially useful when you are passing data to and from databases in which numeric values might be null. Weitere Informationen finden Sie unter Nullable-Typen.For more information, see Nullable Types.

Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
Konvertierung von XML-DatentypenConversion of XML Data Types
Tabelle ganzzahliger TypenIntegral Types Table