Tipos de valor (Referência de C#)Value Types (C# Reference)

Os tipos de valor consistem em duas categorias principais:The value types consist of two main categories:

Os structs se enquadram nestas categorias:Structs fall into these categories:

Principais recursos dos tipos de valorMain Features of Value Types

As variáveis que são baseadas diretamente em tipos de valor contêm valores.Variables that are based on value types directly contain values. Atribuir uma variável de tipo de valor à outra, copia o valor contido.Assigning one value type variable to another copies the contained value. Isso difere da atribuição de variáveis de tipo de referência, que copiam uma referência para o objeto, mas não o próprio objeto.This differs from the assignment of reference type variables, which copies a reference to the object but not the object itself.

Todos os tipos de valor são derivados implicitamente da System.ValueType.All value types are derived implicitly from the System.ValueType.

Ao contrário do que acontece com tipos de referência, você não pode derivar um novo tipo de um tipo de valor.Unlike with reference types, you cannot derive a new type from a value type. No entanto, assim como com tipos de referência, os structs podem implementar interfaces.However, like reference types, structs can implement interfaces.

Ao contrário dos tipos de referência, um tipo de valor não pode conter o valor null.Unlike reference types, a value type cannot contain the null value. No entanto, o recurso tipos que permitem valor nulo permite que os tipos de valor sejam atribuídos como null.However, the nullable types feature does allow for value types to be assigned to null.

Cada tipo de valor tem um construtor padrão implícito que inicializa o valor padrão desse tipo.Each value type has an implicit default constructor that initializes the default value of that type. Para obter informações sobre valores padrão de tipos de valor, consulte Tabela de valores padrão.For information about default values of value types, see Default Values Table.

Principais recursos dos tipos simplesMain Features of Simple Types

Todos os tipos simples – os integrantes à linguagem C# – são aliases dos tipos de sistema do .NET Framework.All of the simple types -- those integral to the C# language -- are aliases of the .NET Framework System types. Por exemplo, int é um alias de System.Int32.For example, int is an alias of System.Int32. Para obter uma lista completa de aliases, consulte Tabela de tipos internos.For a complete list of aliases, see Built-In Types Table.

As expressões constantes, cujos operandos são todos constantes de tipo simples, são avaliadas em tempo de compilação.Constant expressions, whose operands are all simple type constants, are evaluated at compilation time.

Os tipos simples podem ser inicializados com o uso de literais.Simple types can be initialized by using literals. Por exemplo, 'A' é um literal do tipo char e 2001 é um literal do tipo int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

Inicializando tipos de valorInitializing Value Types

As variáveis locais no C# devem ser inicializadas antes de serem usadas.Local variables in C# must be initialized before they are used. Por exemplo, você pode declarar uma variável local sem inicialização, como no exemplo a seguir:For example, you might declare a local variable without initialization as in the following example:

int myInt;  

Você não pode usá-la antes de inicializá-la.You cannot use it before you initialize it. Você pode inicializar a variável usando a instrução a seguir:You can initialize it using the following statement:

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

Essa instrução é equivalente à instrução a seguir:This statement is equivalent to the following statement:

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

É claro que a declaração e a inicialização podem ser feitas na mesma instrução, como nos exemplos a seguir:You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();  

– ou ––or–

int myInt = 0;  

Usando o operador new, chama o construtor padrão do tipo específico e atribui o valor padrão à variável.Using the new operator calls the default constructor of the specific type and assigns the default value to the variable. No exemplo anterior, o construtor padrão atribuiu o valor 0 para myInt.In the preceding example, the default constructor assigned the value 0 to myInt. Para obter mais informações sobre valores atribuídos ao chamar construtores padrão, consulte Tabela de valores padrão.For more information about values assigned by calling default constructors, see Default Values Table.

Com tipos definidos pelo usuário, use new para invocar o construtor padrão.With user-defined types, use new to invoke the default constructor. Por exemplo, a instrução a seguir invoca o construtor padrão do 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.  

Após esta chamada, o struct é considerado para ser definitivamente atribuído, ou seja, todos os seus membros são inicializados com seus valores padrão.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Para obter mais informações sobre o operador new, consulte new.For more information about the new operator, see new.

Para obter informações sobre a formatação da saída de tipos numéricos, consulte Tabela de formatação de resultados numéricos.For information about formatting the output of numeric types, see Formatting Numeric Results Table.

Consulte tambémSee Also

Referência de C#C# Reference
Guia de Programação em C#C# Programming Guide
Palavras-chave do C#C# Keywords
TiposTypes
Tabelas de referência de tiposReference Tables for Types
Tipos de referênciaReference Types