English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O C# é uma linguagem tipada fortemente. Isso significa que devemos declarar o tipo da variável, que indica o tipo de valor que será armazenado, por exemplo, inteiro, ponto flutuante, decimal, texto, etc.
A seguir estão declaradas e inicializadas variáveis de diferentes tipos de dados.
string stringVar = "Hello World!!"; int intVar = 100; float floatVar = 10.2f; char charVar = 'A'; bool boolVar = true;
O C# divide principalmente os tipos de dados em dois: tipos de valor e tipos de referência. Os tipos de valor incluem tipos simples (por exemplo, int, float, bool e char), tipos de enumeração, tipos de estrutura e tipos de valor Nullable. Os tipos de referência incluem tipos de classe, tipos de interface, tipos de delegate e tipos de array. Serão detalhados os tipos de valor e de referência no próximo capítulo.
O C# inclui alguns tipos de dados pré-definidos de valor e de referência. A tabela a seguir lista os tipos de dados pré-definidos:
Tipo | descrição | intervalo | sufixo |
---|---|---|---|
byte | 8 tipo de dados unsigned int bit | de 0 até 255 | |
sbyte | 8 tipo de dados int bit | -128 até 127 | |
short | 16 tipo de dados int bit | -32,768 até 32,767 | |
ushort | 16 tipo de dados unsigned int bit | de 0 até 65,535 | |
int | 32 tipo de dados int bit | -2,147,483,648 até 2,147,483,647 | |
uint | 32 tipo de dados unsigned int bit | de 0 até 4,294,967,295 | u |
long | 64 tipo de dados int bit | -9,223,372,036,854,775,808 até 9,223,372,036,854,775,807 | l |
ulong | 64 tipo de dados unsigned int bit | de 0 até 18,446,744,073,709,551,615 | ul |
float | 32 bit de ponto flutuante simples | -3.402823e38 até 3.402823e38 | f |
double | 64 bit de ponto flutuante duplo | -1.79769313486232e308 até 1.79769313486232e308 | d |
decimal | 128 valor decimal bit exato28-29 número de dígitos válidos | (+ ou-)1.0 x 10e-28 até 7.9 x 10e28 | m |
char | 16 caractere Unicode bit | qualquer caractere válido, por exemplo a,*, \x0058 (hex), ou\u0058 (Unicode) | |
bool | 8 lógica bit true/valor false | True ou False | |
object | classe base de todos os tipos | ||
string | sequência de caracteres Unicode | ||
DateTime | representa a data e a hora | 0:00:00am 1/1/01 até 11:59:59pm 12/31/9999 |
Como mostrado na tabela acima, cada tipo de dados (exceto strings e objetos) contém um intervalo de valores. Se o valor estiver fora do intervalo permitido pelo tipo de dados, o compilador emitirá um erro. Por exemplo, o intervalo do tipo de dados int é-2,147,483,648até2,147,483,647Portanto, se o valor atribuído não estiver dentro deste intervalo, o compilador emitirá um erro.
Exemplo: erro de compilação
// Erro de compilação: não é possível converter implicitamente o tipo 'long' para 'int'. int i = 21474836470;
Os valores dos tipos de dados unsigned int, long, float, double e decimal devem ser sufixados respectivamente com u, l, f, d e m.
uint ui = 100u; float fl = 10.2f; long l = 45755452222222l; ulong ul = 45755452222222ul; double d = 11452222.555d; decimal mon = 1000.15m;
Os tipos de dados pré-definidos são sinônimos dos nomes dos tipos .NET (classes CLR). A tabela a seguir lista os sinônimos dos tipos de dados pré-definidos e os nomes das classes .NET correspondentes.
Alcunhas | Tipos .NET | Tipo |
---|---|---|
byte | System.Byte | struct |
sbyte | System.SByte | struct |
int | System.Int32 | struct |
uint | System.UInt32 | struct |
short | System.Int16 | struct |
ushort | System.UInt16 | struct |
long | System.Int64 | struct |
ulong | System.UInt64 | struct |
float | System.Single | struct |
double | System.Double | struct |
char | System.Char | struct |
bool | System.Boolean | struct |
object | System.Object | Class |
string | System.String | Class |
decimal | System.Decimal | struct |
DateTime | System.DateTime | struct |
Isso significa que, independentemente de você definir int ou Int32todas as variáveis são iguais.
int i = 345; Int32 i = 345;// Como acima
Os valores de certos tipos de dados são convertidos automaticamente para diferentes tipos de dados no C#. Isso é chamado de conversão implícita.
int i = 345; float f = i; Console.WriteLine(f); //Saída:345
No exemplo acima, o valor da variável inteira i é atribuído à variável float f, pois essa operação de conversão é pré-definida no C#.
A seguir está a tabela de conversão de tipos de dados implícitos.
conversão implícita | até |
---|---|
sbyte | short, int, long, float, double decimal |
byte | short, ushort, int, uint, long, ulong, float, double, decimal |
short | int, long, float, double ou decimal |
ushort | int, uint, long, ulong, float, double ou decimal |
int | long, float, double ou decimal. |
uint | long, ulong, float, double ou decimal |
long | float, double ou decimal |
ulong | float, double ou decimal |
char | ushort, int, uint, long, ulong, float, double ou decimal |
float | Double |
Conversão de int, uint, long ou ulong para float e conversão de long ou ulong para double podem causar perda de precisão. Não há conversão implícita de tipos de dados para char.
No entanto, nem todos os tipos de dados são conversíveis implicitamente para outros tipos de dados. Por exemplo, o tipo int não pode ser convertido implicitamente para uint. É necessário especificar explicitamente, conforme mostrado a seguir.
public static void Main() { int i = 100; uint u = (uint) i; Console.Write(i); }
No exemplo acima, o inteiro i é explicitamente convertido para uint no parênteses (uint), convertendo o inteiro para uint.