Tipos e variáveisTypes and variables
Há dois tipos em C#: tipos de referência e tipos de valor.There are two kinds of types in C#: value types and reference types. As variáveis de tipos de valor contêm diretamente seus dados enquanto variáveis de tipos de referência armazenam referências a seus dados, o último sendo conhecido como objetos.Variables of value types directly contain their data whereas variables of reference types store references to their data, the latter being known as objects. Com tipos de referência, é possível que duas variáveis referenciem o mesmo objeto e, portanto, é possível que operações em uma variável afetem o objeto referenciado por outra variável.With reference types, it is possible for two variables to reference the same object and thus possible for operations on one variable to affect the object referenced by the other variable. Com tipos de valor, cada variável tem sua própria cópia dos dados e não é possível que operações em uma variável afetem a outra (exceto no caso de variáveis de parâmetros ref
e out
).With value types, the variables each have their own copy of the data, and it is not possible for operations on one to affect the other (except in the case of ref
and out
parameter variables).
Os tipos de valor do C# são divididos em tipos simples, tipos de enum, tipos struct e tipos de valor anulável.C#’s value types are further divided into simple types, enum types, struct types, and nullable value types. Os tipos de referência do C# são divididos em tipos de classe, tipos de interface, tipos de matriz e tipos delegados.C#’s reference types are further divided into class types, interface types, array types, and delegate types.
O exemplo a seguir fornece uma visão geral do sistema de tipos do C#.The following provides an overview of C#’s type system.
- Tipos de valorValue types
- Tipos simplesSimple types
- Integral com sinal:
sbyte
,short
,int
,long
Signed integral:sbyte
,short
,int
,long
- Integral sem sinal:
byte
,ushort
,uint
,ulong
Unsigned integral:byte
,ushort
,uint
,ulong
- Caracteres Unicode:
char
Unicode characters:char
- Ponto flutuante binário de IEEE:
float
,double
IEEE binary floating-point:float
,double
- Ponto flutuante decimal de alta precisão:
decimal
High-precision decimal floating-point:decimal
- Booliano:
bool
Boolean:bool
- Integral com sinal:
- Tipos enumeradosEnum types
- Tipos definidos pelo usuário do formulário
enum E {...}
User-defined types of the formenum E {...}
- Tipos definidos pelo usuário do formulário
- Tipos structStruct types
- Tipos definidos pelo usuário do formulário
struct S {...}
User-defined types of the formstruct S {...}
- Tipos definidos pelo usuário do formulário
- Tipos de valor anuláveisNullable value types
- Extensões de todos os outros tipos de valor com um valor
null
Extensions of all other value types with anull
value
- Extensões de todos os outros tipos de valor com um valor
- Tipos simplesSimple types
- Tipos de referênciaReference types
- Tipos de classeClass types
- Classe base definitiva de todos os outros tipos:
object
Ultimate base class of all other types:object
- Cadeia de caracteres Unicode:
string
Unicode strings:string
- Tipos definidos pelo usuário do formulário
class C {...}
User-defined types of the formclass C {...}
- Classe base definitiva de todos os outros tipos:
- Tipos de interfaceInterface types
- Tipos definidos pelo usuário do formulário
interface I {...}
User-defined types of the forminterface I {...}
- Tipos definidos pelo usuário do formulário
- Tipos de matrizArray types
- Unidimensional e multidimensional, por exemplo,
int[]
eint[,]
Single- and multi-dimensional, for example,int[]
andint[,]
- Unidimensional e multidimensional, por exemplo,
- Tipos delegadosDelegate types
- Tipos definidos pelo usuário do formulário
delegate int D(...)
User-defined types of the formdelegate int D(...)
- Tipos definidos pelo usuário do formulário
- Tipos de classeClass types
Para obter mais informações sobre tipos numéricos, veja a tabela Tipos integrais e Tipos de ponto flutuante.For more information about numeric types, see Integral types and Floating-point types table.
O tipo bool
do C# é usado para representar valores boolianos — valores que são true
ou false
.C#’s bool
type is used to represent Boolean values—values that are either true
or false
.
O processamento de cadeia de caracteres e caracteres em C# usa codificação Unicode.Character and string processing in C# uses Unicode encoding. O tipo char
representa uma unidade de código UTF-16 e o tipo string
representa uma sequência de unidades de código UTF-16.The char
type represents a UTF-16 code unit, and the string
type represents a sequence of UTF-16 code units.
Os programas em C# usam declarações de tipos para criar novos tipos.C# programs use type declarations to create new types. Uma declaração de tipo especifica o nome e os membros do novo tipo.A type declaration specifies the name and the members of the new type. Cinco das categorias do C# de tipos são tipos definidos pelo usuário: tipos de classe, tipos struct, tipos de interface, tipos enum e tipos delegados.Five of C#’s categories of types are user-definable: class types, struct types, interface types, enum types, and delegate types.
Um tipo class
define uma estrutura de dados que contém membros de dados (campos) e membros de função (métodos, propriedades e outros).A class
type defines a data structure that contains data members (fields) and function members (methods, properties, and others). Os tipos de classe dão suporte à herança única e ao polimorfismo, mecanismos nos quais as classes derivadas podem estender e especializar as classes base.Class types support single inheritance and polymorphism, mechanisms whereby derived classes can extend and specialize base classes.
Um tipo struct
é semelhante a um tipo de classe que representa uma estrutura com membros de dados e membros da função.A struct
type is similar to a class type in that it represents a structure with data members and function members. No entanto, diferentemente das classes, structs são tipos de valor e, normalmente, não precisam de alocação de heap.However, unlike classes, structs are value types and do not typically require heap allocation. Os tipos de estrutura não dão suporte à herança especificada pelo usuário, e todos os tipos de structs são herdados implicitamente do tipo object
.Struct types do not support user-specified inheritance, and all struct types implicitly inherit from type object
.
Um tipo interface
define um contrato como um conjunto nomeado de membros da função pública.An interface
type defines a contract as a named set of public function members. Um class
ou struct
que implementa um interface
deve fornecer implementações de membros da função da interface.A class
or struct
that implements an interface
must provide implementations of the interface’s function members. Um interface
pode herdar de várias interfaces base e um class
ou struct
pode implementar várias interfaces.An interface
may inherit from multiple base interfaces, and a class
or struct
may implement multiple interfaces.
Um tipo delegate
representa referências aos métodos com uma lista de parâmetros e tipo de retorno específicos.A delegate
type represents references to methods with a particular parameter list and return type. Delegados possibilitam o tratamento de métodos como entidades que podem ser atribuídos a variáveis e passadas como parâmetros.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. Os delegados são análogos aos tipos de função fornecidos pelas linguagens funcionais.Delegates are analogous to function types provided by functional languages. Eles também são parecidos com o conceito de ponteiros de função em outras linguagens, mas, ao contrário dos ponteiros de função, os delegados são orientados a objetos e fortemente tipados.They are also similar to the concept of function pointers found in some other languages, but unlike function pointers, delegates are object-oriented and type-safe.
Os tipos class
, struct
, interface
e delegate
dão suporte a genéricos e podem ser parametrizados com outros tipos.The class
, struct
, interface
and delegate
types all support generics, whereby they can be parameterized with other types.
Um tipo enum
é um tipo distinto com constantes nomeadas.An enum
type is a distinct type with named constants. Cada tipo enum
tem um tipo subjacente, que deve ser um dos oito tipos integrais.Every enum
type has an underlying type, which must be one of the eight integral types. O conjunto de valores de um tipo enum
é o mesmo que o conjunto de valores do tipo subjacente.The set of values of an enum
type is the same as the set of values of the underlying type.
O C# dá suporte a matrizes uni e multidimensionais de qualquer tipo.C# supports single- and multi-dimensional arrays of any type. Ao contrário dos tipos listados acima, os tipos de matriz não precisam ser declarados antes de serem usados.Unlike the types listed above, array types do not have to be declared before they can be used. Em vez disso, os tipos de matriz são construídos seguindo um nome de tipo entre colchetes.Instead, array types are constructed by following a type name with square brackets. Por exemplo, int[]
é uma matriz unidimensional de int
, int[,]
é uma matriz bidimensional de int
, e int[][]
é uma matriz unidimensional da matriz unidimensional de int
.For example, int[]
is a single-dimensional array of int
, int[,]
is a two-dimensional array of int
, and int[][]
is a single-dimensional array of single-dimensional array of int
.
Os tipos de valor anulável também não precisam ser declarados antes de serem usados.Nullable value types also do not have to be declared before they can be used. Para cada tipo de valor não nulo T
há um tipo de valor anulável correspondente T?
, que pode conter um valor adicional, null
.For each non-nullable value type T
there is a corresponding nullable value type T?
, which can hold an additional value, null
. Por exemplo, int?
é um tipo que pode conter qualquer número inteiro de 32 bits ou o valor null
.For instance, int?
is a type that can hold any 32-bit integer or the value null
.
O sistema de tipos do C# é unificado, de modo que um valor de qualquer tipo pode ser tratado como um object
.C#’s type system is unified such that a value of any type can be treated as an object
. Cada tipo no C#, direta ou indiretamente, deriva do tipo de classe object
, e object
é a classe base definitiva de todos os tipos.Every type in C# directly or indirectly derives from the object
class type, and object
is the ultimate base class of all types. Os valores de tipos de referência são tratados como objetos simplesmente exibindo os valores como tipo object
.Values of reference types are treated as objects simply by viewing the values as type object
. Os valores de tipos de valor são tratados como objetos, executando conversão boxing e operações de conversão unboxing.Values of value types are treated as objects by performing boxing and unboxing operations. No exemplo a seguir, um valor int
é convertido em object
e volta novamente ao int
.In the following example, an int
value is converted to object
and back again to int
.
using System;
class BoxingExample
{
static void Main()
{
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
}
}
Quando um valor de um tipo de valor é convertido para o tipo object
, uma instância object
, também chamada de "caixa", é alocada para armazenar o valor e o valor é copiado na caixa.When a value of a value type is converted to type object
, an object
instance, also called a "box", is allocated to hold the value, and the value is copied into that box. Por outro lado, quando uma referência object
é convertida em um tipo de valor, é verificado se o object
referenciado é uma caixa do tipo de valor correto e, se a verificação for bem-sucedida, o valor na caixa será copiado.Conversely, when an object
reference is cast to a value type, a check is made that the referenced object
is a box of the correct value type, and, if the check succeeds, the value in the box is copied out.
O sistema de tipo unificado do C# significa que os tipos de valor podem se tornar objetos “sob demanda”.C#’s unified type system effectively means that value types can become objects "on demand." Devido à unificação, as bibliotecas de finalidade geral que usam o tipo object
podem ser usadas com os tipos de referência e os tipos de valor.Because of the unification, general-purpose libraries that use type object
can be used with both reference types and value types.
Existem vários tipos de variáveis no C#, incluindo campos, elementos de matriz, variáveis locais e parâmetros.There are several kinds of variables in C#, including fields, array elements, local variables, and parameters. As variáveis representam os locais de armazenamento e cada variável tem um tipo que determina quais valores podem ser armazenados na variável, conforme mostrado abaixo.Variables represent storage locations, and every variable has a type that determines what values can be stored in the variable, as shown below.
- Tipo de valor não nuloNon-nullable value type
- Um valor de tipo exatoA value of that exact type
- Tipos de valor anulávelNullable value type
- Um valor
null
ou um valor do tipo exatoAnull
value or a value of that exact type
- Um valor
- objetoobject
- Uma referência
null
, uma referência a um objeto de qualquer tipo de referência ou uma referência a um valor de qualquer tipo de valor demarcadoAnull
reference, a reference to an object of any reference type, or a reference to a boxed value of any value type
- Uma referência
- Tipo de classeClass type
- Uma referência
null
, uma referência a uma instância desse tipo de classe ou uma referência a uma instância de uma classe derivada desse tipo de classeAnull
reference, a reference to an instance of that class type, or a reference to an instance of a class derived from that class type
- Uma referência
- Tipo de interfaceInterface type
- Uma referência
null
, uma referência a uma instância de um tipo de classe que implementa esse tipo de interface ou uma referência a um valor demarcado de um tipo de valor que implementa esse tipo de interfaceAnull
reference, a reference to an instance of a class type that implements that interface type, or a reference to a boxed value of a value type that implements that interface type
- Uma referência
- Tipo de matrizArray type
- Uma referência
null
, uma referência a uma instância desse tipo de matriz ou uma referência a uma instância de um tipo de matriz compatívelAnull
reference, a reference to an instance of that array type, or a reference to an instance of a compatible array type
- Uma referência
- Tipo delegadoDelegate type
- Uma referência
null
ou uma referência a uma instância de um tipo de delegado compatívelAnull
reference or a reference to an instance of a compatible delegate type
- Uma referência
Comentários
Carregando comentários...