Anda di halaman 1dari 8

30/05/2016 Tipos(GuiadeProgramaoemC#)

Este artigo foi traduzido por mquina. Para visualizar o arquivo em ingls, marque a caixa de seleo Ingls. Voc
tambm pode exibir o texto Em ingls em uma janela popup, movendo o ponteiro do mouse sobre o texto.

Tipos Guia de Programao em C#


Visual Studio 2015

Tipos, variveis, e valores


C# uma linguagem fortemente tipada.Cada varivel e constante tem um tipo, como cada expresso que avalia
um valor.Cada assinatura de mtodo especifica um tipo para cada parmetro de entrada e para o valor de
retorno.A biblioteca de classes do .NET Framework define um conjunto de tipos numricos internos, bem como
tipos mais complexos que representam uma ampla variedade de compilaes lgicas, como o sistema de arquivos,
as conexes de rede, as colees e matrizes de objetos e datas.Um programa C# tpico usa tipos da biblioteca de
classes bem como tipos definidos pelo usurio que modelam os conceitos que so especficos para o domnio do
problema do programa.

As informaes armazenadas em um tipo podem incluir o seguinte:

O espao de armazenamento exigido por uma varivel do tipo.

O mximo e mnimo que podem ser representados.

Os membros mtodos, campos, eventos e assim por diante que ele contm.

O tipo base do qual ele herda.

A localizao da memria para variveis ser alocada em tempo de execuo.

Os tipos de operaes que so permitidas.

O compilador usa informaes do tipo para verificar se todas as operaes que so executadas em seu cdigo so
seguras.Por exemplo, se voc declarar uma varivel do tipo int, o compilador permite usar a varivel em operaes
de soma e subtrao.Se voc tentar realizar essas mesmas operaes em uma varivel do tipo bool, o compilador
ir gerar um erro, conforme mostrado no seguinte exemplo:

C#

inta=5;
intb=a+2;//OK

booltest=true;

//Error.Operator'+'cannotbeappliedtooperandsoftype'int'and'bool'.
intc=a+test;

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 1/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

Observao

Desenvolvedores de C e C++, observe que no C#, bool no conversvel em int.

O compilador insere informaes do tipo no arquivo executvel como metadados.O common language runtime
CLR usa esses metadados em tempo de execuo para garantir mais segurana de tipo quando ele aloca e
recupera da memria.

Especificando tipos em declaraes de varivel


Quando voc declarar uma varivel ou constante em um programa, voc deve especificar o tipo ou usar a
palavrachave var para permitir que o compilador a determine o tipo.O exemplo a seguir mostra algumas
declaraes de variveis que usam tipos numricos internos e tipos definidos pelo usurio:

C#

//Declarationonly:
floattemperature;
stringname;
MyClassmyClass;

//Declarationwithinitializers(fourexamples):
charfirstLetter='C';
varlimit=3;
int[]source={0,1,2,3,4,5};
varquery=fromiteminsource
whereitem<=limit
selectitem;

Os tipos de parmetros de mtodo e de valores de retorno so especificados na assinatura do mtodo.A


assinatura a seguir mostra um mtodo que exige int como um argumento de entrada e retorna uma cadeia de
caracteres:

C#

publicstringGetName(intID)
{
if(ID<names.Length)
returnnames[ID];
else
returnString.Empty;
}
privatestring[]names={"Spencer","Sally","Doug"};

Depois que uma varivel for declarada, ela no pode ser redeclarada com um novo tipo e ela no pode ser
atribuda a um valor que no compatvel com seu tipo declarado.Por exemplo, voc no pode declarar um int
e depois atribulo um valor Booleano verdadeiro.No entanto, valores podem ser convertidos a outros tipos, por
exemplo quando eles so atribudos a variveis novas ou passados como argumentos de mtodo.Uma
converso de tipo que no cause a perda de dados realizado automaticamente pelo compilador.Uma
converso que pode causar perda de dados requer uma converso no cdigo fonte.

Para obter mais informaes, consulte Converses cast e converses de tipo Guia de Programao em C#.

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 2/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

Tipos internos
C# fornece um conjunto padro de tipos numricos internos para representar nmeros inteiros, valores de ponto
flutuante, expresses boolianas, caracteres de texto, valores decimais e outros tipos de dados. Tambm h os tipos
internos string e object. Eles esto disponveis para voc uslos em qualquer programa C#.Para obter mais
informaes sobre os tipos internos, consulte Tabelas de referncia de tipos Referncia de C#.

Tipos personalizados
Voc usa as construes struct, class, interface e enum para criar seus prprios tipos personalizados.A prpria
biblioteca de classes do .NET Framework uma coleo de tipos personalizados fornecidos pela Microsoft que
voc pode usar em seus prprios aplicativos.Por padro, os tipos usados com mais frequncia na biblioteca de
classe esto disponveis em qualquer programa C#.Outros ficam disponveis somente quando voc adiciona
explicitamente uma referncia de projeto ao assembly no qual eles so definidos. Depois que o compilador tem
uma referncia ao assembly, voc pode declarar variveis e constantes dos tipos declarados no assembly no
cdigofonte. Para obter mais informaes, consulte Biblioteca de classes do .NET Framework.

O Sistema de Tipo Comum


importante compreender dois pontos fundamentais sobre o sistema de tipos em .NET Framework:

Suporta o princpio de herana.Os tipos podem derivar de outros tipos, chamados de tipos de base.O tipo
derivado herda com algumas restries os mtodos, as propriedades e outros membros do tipo base.O
tipo base pode derivar por sua vez de outro tipo, nesse caso o tipo derivado herda os membros de ambos
os tipos de base na sua hierarquia de herana.Todos os tipos, incluindo numricos internos, como
System.Int32 palavrachave do C#: int, finalmente derivam de um nico tipo base, que System.Object
palavrachave do C#: object.Essa hierarquia de tipo unificado chamada de Common Type System
CTS.Para obter mais informaes sobre herana no C#, consulte Herana Guia de Programao em C#.

Cada tipo do CTS definido como um tipo de valor ou um tipo de referncia.Isso inclui todos os tipos
personalizados na biblioteca de classes do .NET Framework e tambm seus prprios tipos definidos pelo
usurio. Tipos que voc define usando a palavrachave struct so tipos de valor; todos os tipos numricos
internos so structs. Os tipos que voc define usando a palavrachave classe so tipos de referncia.Tipos
de referncia e tipos de valor tm diferentes regras de tempo de compilao e comportamento de tempo
de execuo diferente.

A ilustrao a seguir mostra a relao entre tipos de valor e tipos de referncia no CTS.

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 3/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

Tipos de valor e tipos de referncia no CTS

Observao

Voc pode ver que os tipos mais comumente usados so todos organizados no namespace System. No
entanto, o namespace no qual um tipo est contido no tem nenhuma relao com o fato de ser um tipo de
valor ou um tipo de referncia.

Tipos de valor
Os tipos de valor derivam de System.ValueType, que deriva de System.Object.Os tipos que derivam de
System.ValueType possuem comportamento especial no CLR.As variveis do tipo de valor contm seus valores
diretamente, o que significa que a memria alocada internamente no contexto em que a varivel
declarada.No h nenhuma alocao de pilha ou sobrecarga de coleta de lixo separada para variveis do tipo
de valor.

H duas categorias de tipos de valor: struct e enum.

Os tipos numricos internos so estruturas, e tm propriedades e mtodos que voc pode acessar:

C#

//StaticmethodontypeByte.
byteb=Byte.MaxValue;

Mas, voc declara e atribui valores a eles como se fossem tipos simples sem agregao:

C#

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 4/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

bytenum=0xA;
inti=5;
charc='Z';

Os tipos de valor so selados, o que significa que, por exemplo, voc no pode derivar um tipo de System.Int32,
e voc no pode definir uma estrutura para herdar de nenhuma classe ou estrutura definida pelo usurio, pois
uma estrutura pode herdar apenas de System.ValueType.No entanto, uma estrutura pode implementar uma ou
mais interfaces. possvel converter um tipo de estrutura para um tipo de interface; isso faz com que uma
operao boxing envolve a estrutura dentro de um objeto de tipo de referncia na heap gerenciada.Operaes
de converso boxing ocorrem quando voc passa um tipo de valor para um mtodo que utiliza System.Object
como um parmetro de entrada.Para obter mais informaes, consulteBoxing e unboxing C# Guia de
programao.

Voc usa a palavrachave struct para criar seus prprios tipos de valor personalizados.Normalmente, uma
estrutura usada como um continer para um pequeno conjunto de variveis relacionadas, conforme mostrado
no exemplo a seguir:

C#

publicstructCoOrds
{
publicintx,y;

publicCoOrds(intp1,intp2)
{
x=p1;
y=p2;
}
}

Para obter mais informaes sobre estruturas, consulte Structs Guia de Programao em C#.Para obter mais
informaes sobre tipos de valores no .NET Framework, consulte Common Type System.

Outra categoria de tipos de valor o enum.


Um enum define um conjunto de constantes integrais nomeadas.Por exemplo, a enumerao
System.IO.FileMode na biblioteca de classes do .NET Framework contm um conjunto de inteiros constantes
nomeados que especificam como um arquivo deve ser aberto. definido conforme mostrado no exemplo a
seguir:

C#

publicenumFileMode
{
CreateNew=1,
Create=2,
Open=3,
OpenOrCreate=4,
Truncate=5,
Append=6,
}

A constante System.IO.FileMode.Create tem um valor 2.No entanto, o nome muito mais significativo para os
seres humanos que leem o cdigofonte e, por esse motivo, melhor usar enumeraes em vez de nmeros
https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 5/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

literais constantes.Para obter mais informaes, consulte System.IO.FileMode.

Todos os enums herdam de System.Enum, que herda de System.ValueType.Todas as regras que se aplicam a
struts tambm se aplicam a enums.Para obter mais informaes sobre enums, consulte Tipos de enumerao
Guia de Programao em C#.

Tipos de referncia
Um tipo que definido como uma classe, delegate, vetor ouinterface, https://msdn.microsoft.com/pt
br/library/87d83y5b.aspx de tipo de referncia.Em tempo de execuo, quando voc declara uma varivel de
tipo de referncia, a varivel contm o valor null at que voc crie explicitamente uma instncia do objeto,
usando o operador de https://msdn.microsoft.com/ptbr/library/51y09td4.aspxNovo, ou atribuir a ele um
objeto que foi criado em outro local usando new, como mostra o exemplo a seguir:

C#

MyClassmc=newMyClass();
MyClassmc2=mc;

Uma interface deve ser inicializada juntamente com um objeto da classe que implementa ele.Se MyClass
implementa IMyInterface, voc cria uma instncia de IMyInterface conforme mostrado no exemplo o
seguir:

C#

IMyInterfaceiface=newMyClass();

Quando o objeto criado, a memria alocada no heap gerenciado, e a varivel contm apenas uma referncia
para o local do objeto.Os tipos na heap gerenciada requerem a sobrecarga quando so atribudos e quando so
recuperados pela funcionalidade de gerenciamento automtico de memria do CLR, que conhecido como
coleta de lixo.No entanto, a coleta de lixo tambm altamente otimizada e, na maioria dos cenrios, no cria
um problema de desempenho.Para obter mais informaes sobre a coleta de lixo, consulte Gerenciamento
automtico de memria.

Todas as matrizes so tipos de referncia, mesmo se seus elementos so tipos de valor.Matrizes derivam
implicitamente da classe System.Array, mas voc as declara e usa com a sintaxe simplificada que fornecida por
C#, conforme mostrado no exemplo o seguir:

C#

//Declareandinitializeanarrayofintegers.
int[]nums={1,2,3,4,5};

//AccessaninstancepropertyofSystem.Array.
intlen=nums.Length;

Tipos de referncia oferecem suporte total a herana.Ao criar uma classe, voc pode herdar de qualquer outra
interface ou classe que no esteja definida como vedada, e outras classes podem herdar da sua classe e
substituir os mtodos virtuais.Para obter mais informaes sobre como criar suas prprias classes, consulte
Classes e structs Guia de Programao em C#.Para obter mais informaes sobre herana e mtodos virtuais,
consulte Herana Guia de Programao em C#.

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 6/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

Tipos de valores literais


Em C#, os valores literais recebem um tipo do compilador.Voc pode especificar como um literal numrico dever
ser digitado, anexandouma letraao final do nmero.Por exemplo, para especificar que o valor 4,56 deve ser
tratado como um float, acrescente um f ou F aps o nmero: 4.56f.Se nenhuma letra for anexada, o
compilador ir inferir um tipo para o literal.Para obter mais informaes sobre quais tipos podem ser especificados
com sufixos de letra, consulte as pginas referncia para tipos individuais em Tipos valor referncia C#.

Como os literais so tipados, e todos os tipos derivam de System.Objectfinalmente, voc pode escrever e compilar
o cdigo da seguinte forma:

C#

strings="Theansweris"+5.ToString();
//Outputs:"Theansweris5"
Console.WriteLine(s);

Typetype=12345.GetType();
//Outputs:"System.Int32"
Console.WriteLine(type);

Tipos genricos
Um tipo pode ser declarado com um ou mais parmetros de tipo que servem como um espao reservado para o
tipo real o tipo concreto que o cdigo do cliente fornecer quando ele criar uma instncia do tipo.Tais tipos so
chamados de tipos genricos.Por exemplo, o tipo .NET Framework System.Collections.Generic.List<T> possui um
parmetro de tipo que determinado por conveno como T.Ao criar uma instncia do tipo, voc especifica o tipo
dos objetos que a lista conter, por exemplo, cadeia de caracteres:

C#

List<string>strings=newList<string>();

O uso do parmetro de tipo possibilita reutilizar a mesma classe para conter qualquer tipo de elemento, sem que
seja necessrio converter cada elemento em objeto.Classes de coleo genrica so chamadas colees fortemente
tipadas porque o compilador sabe o tipo especfico de elementos da coleo e pode gerar um erro em tempo de
compilao se, por exemplo, voc tentar adicionar um inteiro ao objeto strings no exemplo anterior.Para obter
mais informaes, consulteGenerics Guia de programao C#.

Tipos implcitos, tipos annimos e tipos anulveis


Conforme observado anteriormente, voc pode implicitamente digitar uma varivel local mas no membros da
classe usando a palavrachave var.A varivel ainda recebe um tipo em tempo de compilao, mas o tipo
fornecido pelo compilador.Para obter mais informaes, consulteDigitada implicitamente variveis Local C# Guia
de programao.

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 7/8
30/05/2016 Tipos(GuiadeProgramaoemC#)

Em alguns casos, inconveniente criar um determinado tipo para conjuntos simples de valores relacionados que
voc no pretende armazenar ou transferir fora dos limites do mtodo. possvel criar tipos annimos para essa
finalidade.Para obter mais informaes, consulteTipos annimos Guia de programao C#.

Tipos de valor comuns no podem ter um valor nulo.No entanto, voc pode criar tipos de valor anulveis afixando
? aps o tipo.Por exemplo, int? um tipo de int que pode tambm ter o valor zero.No CTS, os tipos anulveis so
instncias do tipo genrico de estrutura System.Nullable<T>.Os tipos anulveis so especialmente teis quando
voc est passando dados para e de bancos de dados no quais os valores numricos podem ser nulos.Para obter
mais informaes, consulteTipos anulveis guia de programao C#.

Sees relacionadas
Para obter mais informaes, consulte os seguintes tpicos:

Converses cast e converses de tipo Guia de Programao em C#

Converses boxing e unboxing Guia de Programao em C#

Usando o tipo dynamic Guia de Programao em C#

Tipos de valor Referncia de C#

Tipos de referncia Referncia de C#

Classes e structs Guia de Programao em C#

Tipos annimos Guia de Programao em C#

Genricos Guia de Programao em C#

Variveis e expresses em Introduo ao Visual C# 2010

Especificao da Linguagem C#
Para obter mais informaes, consulte a Especificao da linguagem C#. A especificao da linguagem a fonte
definitiva para a sintaxe e o uso de C#.

Consulte tambm
Referncia de C#
Guia de Programao em C#
Conversion of XML Data Types
Tabela de tipos integrais Referncia de C#

2016 Microsoft

https://msdn.microsoft.com/ptbr/library/ms173104(d=printer).aspx 8/8

Anda mungkin juga menyukai