English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tipos de Dados do C#

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.

Tipos de dados pré-definidos no C#

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:

Tipodescriçãointervalosufixo
byte8 tipo de dados unsigned int bitde 0 até 255
sbyte8 tipo de dados int bit-128 até 127
short16 tipo de dados int bit-32,768 até 32,767
ushort 16 tipo de dados unsigned int bitde 0 até 65,535
int32 tipo de dados int bit-2,147,483,648

até

2,147,483,647


uint32 tipo de dados unsigned int bitde 0 até 4,294,967,295u
long64 tipo de dados int bit-9,223,372,036,854,775,808
até
9,223,372,036,854,775,807
l
ulong64 tipo de dados unsigned int bitde 0 até 18,446,744,073,709,551,615ul
float32 bit de ponto flutuante simples-3.402823e38 até 3.402823e38f
double64 bit de ponto flutuante duplo-1.79769313486232e308 até 1.79769313486232e308d
decimal128 valor decimal bit exato28-29 número de dígitos válidos(+ ou-)1.0 x 10e-28  até 7.9 x 10e28m
char16 caractere Unicode bitqualquer caractere válido, por exemplo a,*, \x0058 (hex), ou\u0058 (Unicode)
bool8 lógica bit true/valor falseTrue ou False
objectclasse base de todos os tipos

string

sequência de caracteres Unicode



DateTimerepresenta a data e a hora0: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;

Sinônimos e tipos .NET

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.

AlcunhasTipos .NETTipo
byteSystem.Bytestruct
sbyteSystem.SBytestruct
intSystem.Int32struct
uintSystem.UInt32struct
shortSystem.Int16struct
ushortSystem.UInt16struct
longSystem.Int64struct
ulongSystem.UInt64struct
floatSystem.Singlestruct
doubleSystem.Doublestruct
charSystem.Charstruct
boolSystem.Booleanstruct
objectSystem.ObjectClass
stringSystem.StringClass
decimalSystem.Decimalstruct
DateTimeSystem.DateTimestruct

Isso significa que, independentemente de você definir int ou Int32todas as variáveis são iguais.

int i = 345;
Int32 i = 345;// Como acima

Conversão de tipo

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ícitaaté
sbyteshort, int, long, float, double decimal
byteshort, ushort, int, uint, long, ulong, float, double, decimal
shortint, long, float, double ou decimal
ushortint, uint, long, ulong, float, double ou decimal
intlong, float, double ou decimal.
uintlong, ulong, float, double ou decimal
longfloat, double ou decimal
ulongfloat, double ou decimal
charushort, int, uint, long, ulong, float, double ou decimal
floatDouble

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.