Типы значений (справочник по C#)Value types (C# Reference)

Существует два типа значений:There are two kinds of value types:

Основные возможности типов значенийMain features of value types

Переменная типа значения содержит значение типа.A variable of a value type contains a value of the type. Например, переменная типа int может содержать значение 42.For example, a variable of the int type might contain the value 42. Это отличается от переменной ссылочного типа, которая содержит ссылку на экземпляр типа, также известный как объект.This differs from a variable of a reference type, which contains a reference to an instance of the type, also known as an object. Когда вы присваиваете новое значение переменной типа значения, это значение копируется.When you assign a new value to a variable of a value type, that value is copied. Когда вы присваиваете новое значение переменной ссылочного типа, копируется не сам объект, а ссылка на него.When you assign a new value to a variable of a reference type, the reference is copied, not the object itself.

Все типы значения являются неявными производными от System.ValueType.All value types are derived implicitly from the System.ValueType.

В отличие от ссылочных типов, создать новый производный от типа значения тип нельзя.Unlike with reference types, you cannot derive a new type from a value type. Тем не менее, как и ссылочные типы, структуры могут реализовывать интерфейсы.However, like reference types, structs can implement interfaces.

Переменные типа значения не могут иметь значение null по умолчанию.Value type variables cannot be null by default. Однако переменные соответствующих типов, допускающих значение null, могут иметь значение null.However, variables of the corresponding nullable types can be null.

Каждый тип значения имеет неявный конструктор по умолчанию, который инициализирует значение по умолчанию для этого типа.Each value type has an implicit default constructor that initializes the default value of that type. Дополнительные сведения о значениях по умолчанию для типов значений см. в разделе Таблица значений по умолчанию (справочник по C#).For information about default values of value types, see Default values table.

Простые типыSimple types

Простые типы — это набор предопределенных типов структур, предоставленных C#, который содержит следующие типы:The simple types are a set of predefined struct types provided by C# and comprise the following types:

Простые типы определяются с помощью ключевых слов, но эти ключевые слова являются просто псевдонимами для предопределенных типов структур в пространстве имен System.The simple types are identified through keywords, but these keywords are simply aliases for predefined struct types in the System namespace. Например, int является псевдонимом типа System.Int32.For example, int is an alias of System.Int32. Полный список псевдонимов см. в разделе Таблица встроенных типов (Справочник по C#).For a complete list of aliases, see Built-in types table.

Простые типы отличаются от других типов структур тем, что они разрешают некоторые дополнительные операции:The simple types differ from other struct types in that they permit certain additional operations:

  • Простые типы можно инициализировать с помощью литералов.Simple types can be initialized by using literals. Например, 'A' — это литерал типа char, а 2001 — литерал типа int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

  • Константы простых типов можно объявить с помощью ключевого слова const.You can declare constants of the simple types with the const keyword. Невозможно иметь константы других типов структур.It's not possible to have constants of other struct types.

  • Константные выражения, операнды которых являются константами простого типа, вычисляются во время компиляции.Constant expressions, whose operands are all simple type constants, are evaluated at compile time.

Дополнительные сведения см. в разделе Простые типы статьи Предварительная спецификация C# 6.0.For more information, see the Simple types section of the C# language specification.

Инициализация типов значенийInitializing value types

В языке C# локальные переменные необходимо инициализировать перед использованием.Local variables in C# must be initialized before they are used. Например, можно объявить локальную переменную без инициализации, как показано в следующем примере:For example, you might declare a local variable without initialization as in the following example:

int myInt;

Тем не менее использовать ее до инициализации нельзя.You cannot use it before you initialize it. Для инициализации локальной переменной можно использовать следующую инструкцию:You can initialize it using the following statement:

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

Эта инструкция эквивалентна следующей:This statement is equivalent to the following statement:

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

При необходимости объявление и инициализация могут быть выполнены в одной инструкции, как показано в следующем примере:You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();

– или ––or–

int myInt = 0;

Инструкция new вызывает конструктор по умолчанию для конкретного типа и присваивает переменной значение по умолчанию.Using the new operator calls the default constructor of the specific type and assigns the default value to the variable. В предыдущем примере конструктор по умолчанию присваивает значение 0 переменной myInt.In the preceding example, the default constructor assigned the value 0 to myInt. Дополнительные сведения о значениях, присваиваемых путем вызова конструктора по умолчанию, см. в разделе Таблица значений по умолчанию (справочник по C#).For more information about values assigned by calling default constructors, see Default values table.

Для определяемых пользователем типов инструкция new вызывает конструктор по умолчанию.With user-defined types, use new to invoke the default constructor. Например, следующая инструкция вызывает конструктор по умолчанию для структуры Point:For example, the following statement invokes the default constructor of the Point struct:

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

После этого вызова структура считается определенно присвоенной, то есть все ее элементы будут инициализированы и получат значения по умолчанию.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Дополнительные сведения об операторе new см. в разделе new (справочник по C#).For more information about the new operator, see new.

Дополнительные сведения о форматировании выходных данных числовых типов см. в разделе Таблица форматирования числовых результатов (справочник по C#).For information about formatting the output of numeric types, see Formatting numeric results table.

См. такжеSee also