Tipos de valor (Referencia de C#)Value types (C# Reference)

Existen dos clases de tipos de valor:There are two kinds of value types:

Características principales de los tipos de valorMain features of value types

Una variable de un tipo de valor contiene un valor del tipo.A variable of a value type contains a value of the type. Por ejemplo, una variable del tipo int podría contener el valor 42.For example, a variable of the int type might contain the value 42. Esto difiere de una variable de un tipo de referencia, que contiene una referencia a una instancia del tipo y que también se conoce como un objeto.This differs from a variable of a reference type, which contains a reference to an instance of the type, also known as an object. Al asignar un nuevo valor a una variable de un tipo de valor, se copia ese valor.When you assign a new value to a variable of a value type, that value is copied. Al asignar un nuevo valor a una variable de un tipo de referencia, se copia la referencia, no el propio objeto.When you assign a new value to a variable of a reference type, the reference is copied, not the object itself.

Todos los tipos de valor se derivan implícitamente de System.ValueType.All value types are derived implicitly from the System.ValueType.

A diferencia de los tipos de referencia, no puede derivar un tipo nuevo de un tipo de valor.Unlike with reference types, you cannot derive a new type from a value type. En cambio, como los tipos de referencia, los structs pueden implementar interfaces.However, like reference types, structs can implement interfaces.

Las variables de tipo de valor no pueden ser null de forma predeterminada.Value type variables cannot be null by default. Sin embargo, las variables de los tipos que aceptan valores NULL correspondientes pueden ser null.However, variables of the corresponding nullable types can be null.

Cada tipo de valor tiene un constructor predeterminado implícito que inicializa el valor predeterminado de ese tipo.Each value type has an implicit default constructor that initializes the default value of that type. Para información sobre los valores predeterminados de los tipos de valor, vea Tabla de valores predeterminados.For information about default values of value types, see Default values table.

Tipos simplesSimple types

Los tipos simples son un conjunto de tipos struct predefinidos proporcionados por C# y comprenden los siguientes tipos:The simple types are a set of predefined struct types provided by C# and comprise the following types:

Los tipos simples se identifican mediante palabras clave, pero estas palabras clave son simplemente los alias para tipos struct predefinidos en el espacio de nombres System.The simple types are identified through keywords, but these keywords are simply aliases for predefined struct types in the System namespace. Por ejemplo, int es un alias de System.Int32.For example, int is an alias of System.Int32. Para una lista completa de alias, vea Tabla de tipos integrados.For a complete list of aliases, see Built-in types table.

Los tipos simples se diferencian de otros tipos struct en que permiten determinadas operaciones adicionales:The simple types differ from other struct types in that they permit certain additional operations:

  • Los tipos simples pueden inicializarse mediante el uso de literales.Simple types can be initialized by using literals. Por ejemplo, 'A' es un literal del tipo char y 2001 es un literal del tipo int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

  • Puede declarar constantes de los tipos simples con la palabra clave const.You can declare constants of the simple types with the const keyword. No es posible tener constantes de otros tipos struct.It's not possible to have constants of other struct types.

  • Las expresiones constantes, cuyos operandos son todas constantes de tipo simple, se evalúan en tiempo de compilación.Constant expressions, whose operands are all simple type constants, are evaluated at compile time.

Para más información, vea la sección Tipos simples de la Especificación del lenguaje C#.For more information, see the Simple types section of the C# language specification.

Inicialización de tipos de valorInitializing value types

Las variables locales en C# deben inicializarse antes de usarse.Local variables in C# must be initialized before they are used. Por ejemplo, puede declarar una variable local sin inicialización como en el ejemplo siguiente:For example, you might declare a local variable without initialization as in the following example:

int myInt;

No puede usarla antes de inicializarla.You cannot use it before you initialize it. Puede inicializarla con la siguiente instrucción:You can initialize it using the following statement:

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

Esta instrucción es equivalente a la instrucción siguiente:This statement is equivalent to the following statement:

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

Por supuesto, puede tener la declaración y la inicialización en la misma instrucción como en los ejemplos siguientes:You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();

-O bien-–or–

int myInt = 0;

Con el operador new se llama al constructor predeterminado del tipo específico y asigna el valor predeterminado a la variable.Using the new operator calls the default constructor of the specific type and assigns the default value to the variable. En el ejemplo anterior, el constructor predeterminado ha asignado el valor 0 a myInt.In the preceding example, the default constructor assigned the value 0 to myInt. Para más información sobre los valores que se han asignado llamando a los constructores predeterminados, vea Tabla de valores predeterminados.For more information about values assigned by calling default constructors, see Default values table.

Con los tipos definidos por el usuario, use new para invocar al constructor predeterminado.With user-defined types, use new to invoke the default constructor. Por ejemplo, la siguiente instrucción invoca al constructor predeterminado del struct Point:For example, the following statement invokes the default constructor of the Point struct:

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

Después de esta llamada, el struct se considera asignado definitivamente; es decir, todos sus miembros se inicializan a sus valores predeterminados.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Para obtener más información acerca del operador new, vea new.For more information about the new operator, see new.

Para información sobre cómo aplicar formato al resultado de los tipos numéricos, vea Tabla de formatos de presentación para valores numéricos.For information about formatting the output of numeric types, see Formatting numeric results table.

Vea tambiénSee also