Tipos (guia de programação translation from VPE for Csharp)
Tipos, variáveis e valores
Translation from VPE for Csharp é uma linguagem com fortemente tipado.Cada variável e a constante tem um tipo, assim sistema autônomo cada expressão avaliada sistema autônomo um valor.Cada assinatura do método Especifica um tipo para cada parâmetro de entrada e para o valor retornado.O .NET estrutura biblioteca de classes define um conjunto de tipos numéricos internos, bem sistema autônomo sistema autônomo tipos mais complexos que representam uma ampla variedade de construções lógicas, sistema autônomo o sistema de arquivos, conexões de rede, coleções e matrizes de objetos e sistema autônomo datas.Um programa translation from VPE for Csharp típico usa tipos da biblioteca de classes, bem sistema autônomo tipos definidos pelo usuário que modelam sistema autônomo conceitos que são específicos de domínio do problema do programa.
As informações armazenadas em um tipo incluem o seguinte:
O espaço de armazenamento que requer uma variável do tipo.
Os valores mínimos e máximo que pode representar.
Os membros (métodos, campos, eventos e assim por diante) que ele contém.
O tipo de base, ela herda da.
O local onde será possível alocar memória para variáveis em time de execução.
Os tipos de operações que são permitidos.
O compilador usa informações de tipo para certificar-se de que todas as operações executadas em seu código são segurança de tipos.Por exemplo, se você declarar uma variável do tipo int, o compilador permite que você usar a variável além e operações de subtração.Se você tentar executar essas operações mesmas em uma variável do tipo bool, o compilador gera um erro, sistema autônomo mostrado no exemplo a seguir:
int a = 5;
int b = a + 2; //OK
bool test = true;
// Error. Operator '+' cannot be applied to operands of type 'int' and 'bool'.
int c = a + test;
Observação: |
---|
Desenvolvedores de C e C++, Observe que em translation from VPE for Csharp, bool não é conversível em int. |
O compilador incorpora sistema autônomo informações do tipo para o arquivo executável sistema autônomo metadados.O common linguagem tempo de execução (CLR) usa esses metadados em time de execução para garantir ainda mais segurança de tipos quando ele aloca e recupera memória.
Especificando tipos na declaração de variável
Quando você declara uma variável ou constante em um programa, você deve especificar seu tipo ou usar o var palavra-chave para permitir que o compilador inferir o tipo.O exemplo a seguir mostra algumas declarações de variáveis que usam tipos numéricos internos e tipos complexos definidos pelo usuário:
// Declaration only:
float temperature;
string name;
MyClass myClass;
// Declaration with initializers (four examples):
char firstLetter = 'C';
var limit = 3;
int[] source = { 0, 1, 2, 3, 4, 5 };
var query = from item in source
where item <= limit
select item;
Os tipos de parâmetros de método e valores de retorno são especificados na assinatura do método.A assinatura a seguir mostra um método que exija um int sistema autônomo um argumento de entrada e retorna uma cadeia de caracteres:
public string GetName(int ID)
{
if (ID < names.Length)
return names[ID];
else
return String.Empty;
}
private string[] names = { "Spencer", "Sally", "Doug" };
Após uma variável é declarada, ela não pode ser re-declared com um novo tipo e não pode ser atribuído um valor que não é compatível com seu tipo declarado.Por exemplo, você não pode declarar um int e depois atribui a ela um valor booliano de True.No entanto, valores podem ser convertidos em outros tipos, por exemplo, quando são atribuídos a variáveis novas ou passados sistema autônomo argumentos de método.A conversão de tipo que não cause a perda de dados é realizado automaticamente pelo compilador.Uma conversão que pode causar perda de dados requer um elenco no código-fonte.
Para obter mais informações, consulte Elenco e conversões de tipo (guia de programação translation from VPE for Csharp).
Tipos internos
Translation from VPE for Csharp fornece um conjunto padrão de tipos numéricos internos para representar inteiros, flutuante valores de ponto, expressões booleanas, caracteres de texto, valores Decimal e outros tipos de dados.Também há interna string e object tipos. Eles estão disponível para uso em qualquer programa translation from VPE for Csharp.Para uma obter mais informações sobre os tipos internos, consulte Tipos tabelas Reference (referência C#).
Tipos personalizados
Você usa o struct, classe, interface, and Enum construções para criar seus próprios tipos personalizados.O .NET estrutura classe própria biblioteca é uma coleção de tipos personalizados fornecidos pela Microsoft que você pode usar em seus próprios aplicativos.Por padrão, os tipos mais freqüentemente usados na biblioteca de classes estão disponível em qualquer programa translation from VPE for Csharp.Outras ficam disponível somente quando você adiciona uma referência de projeto para o assembly em que eles são definidos explicitamente.Depois que o compilador tiver uma referência ao assembly, você pode declarar variáveis (e constantes) dos tipos declarados no assembly no código-fonte.Para obter mais informações, consulte Biblioteca de classes do .NET Framework.
O Common Type sistema
É importante compreender dois pontos fundamentais sobre o sistema de tipo no .NET Framework:
Ele é compatível com o princípio de herança.Os tipos podem ser derivados dos outros tipos, chamados tipos base.O tipo derivado herda (com algumas restrições), os métodos, propriedades e outros membros do tipo de base.O tipo de base por sua vez possível derivar de algum Outros tipo, nesse caso o tipo derivado herda os membros de ambos os tipos base em sua hierarquia de herança.Todos sistema autônomo tipos, incluindo tipos numéricos internos, sistema autônomo System.Int32 (Palavra-chave translation from VPE for Csharp: int), derivam, por fim, de um único tipo de base, que é System.Object (Palavra-chave translation from VPE for Csharp: objeto).Essa hierarquia de tipo unificada é chamada de Common Type System (CTS). Para obter mais informações sobre herança em translation from VPE for Csharp, consulte Herança (Guia de programação C#).
O CTS cada tipo é definido sistema autônomo qualquer um tipo de valor or a tipo de referência.Isso inclui todos os tipos personalizados no .NET estrutura classe biblioteca e também seus próprios tipos definidos pelo usuário.Tipos que você define usando o struct palavra-chave são tipos de valor; todos os tipos numéricos internos são structs. Tipos que você define usando o classereferência de palavra-chave são tipos.Tipos de referência e tipos de valores têm regras diferentes do time de compilar e comportamento em time de execução diferente.
A ilustração a seguir mostra a relação entre tipos de valor e tipos de referência no CTS.
Tipos de valor e referência a tipos no CTS
Observação: |
---|
Você pode ver que o mais comumente usados os tipos são um ll organizada no System espaço para nome. No entanto, o namespace no qual um tipo contido não tem nenhuma relação se ele é um valor de tipo ou tipo de referência. |
Tipos de valor
Derivam de tipos de valor de System.ValueType, que deriva de System.Object. Tipos que derivam de System.ValueType ter um comportamento especial no CLR. As variáveis do tipo de valor contêm diretamente seus valores, que significa que a memória é alocada in-line em qualquer contexto a variável é declarada.Não há nenhuma alocação de heap separada ou sobrecarga de coleção de lixo para variáveis do tipo de valor.
Há duas categorias de tipos de valor: struct and Enum.
Os tipos numéricos internos são structs e têm propriedades e métodos que você pode acessar:
// Static method on type Byte.
byte b = Byte.MaxValue();
Mas declarar e atribuir valores a eles sistema autônomo se fossem tipos não agregação simples:
byte num = 0xA;
int i = 5;
char c = 'Z';
Tipos de valor são selado, que significa que, por exemplo, se você não pode derivar um tipo de System.Int32, e não é possível definir uma struct de herdar de qualquer classe definida pelo usuário ou struct porque uma struct só pode herdar de System.ValueType. No entanto, uma struct pode implementar uma ou mais interfaces.Você pode converter um tipo de struct para um tipo de interface; isso faz com que um conversão boxing operação para encapsular o struct dentro de um objeto do tipo de referência no heap gerenciado.Operações de conversão boxing ocorrem quando você passar um tipo de valor para um método que usa um System.Object sistema autônomo um parâmetro de entrada. Para obter mais informações, consulte conversão boxing e conversão conversão unboxing (guia de programação translation from VPE for Csharp).
Você usa o struct palavra-chave para criar seus próprios tipos de valor personalizado.Normalmente, uma struct é usada sistema autônomo um contêiner para um pequeno conjunto de variáveis relacionadas, de sistema autônomo mostrado no exemplo a seguir:
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}
Para obter mais informações sobre estruturas, consulte Structs (guia de programação C#). Para obter mais informações sobre tipos de valor no .NET Framework, consulte Tipos de valores no CTS (Common Type System).
A Outros categoria de tipos de valor é Enum.Enum define um conjunto de constantes nomeadas integrais.Por exemplo, a System.IO.FileMode enumeração na biblioteca de classes do .NET estrutura contém um conjunto de inteiros constante nomeados que especifica como um arquivo deve ser aberto. Ele é definido sistema autônomo mostrado no exemplo a seguir:
public enum FileMode
{
CreateNew = 1,
Create = 2,
Open = 3,
OpenOrCreate = 4,
Truncate = 5,
Append = 6,
}
The Create constante tem um valor de 2. No entanto, o nome é muito mais significativo para seres humanos lendo o código-fonte e pelo motivo que que ela é melhor usar enumerações em vez de números literal constante.
Todos os enums herdam System.Enum, que herda de System.ValueType. Todas as regras que se aplicam a estruturas também se aplicam a enumerações.Para obter mais informações sobre enums, consulte Tipos de enumeração (guia de programação translation from VPE for Csharp).
Tipos de referência
Um tipo que é definido sistema autônomo um classe, delegado, array, or interface is a tipo de referência.Em time de execução, quando você declara uma variável de um tipo de referência, a variável contém o valor nulo até que você explicitamente criar uma instância do objeto, usando o novo operador, ou atribuir-lhe um objeto que tenha sido criar d em outro lugar usando new, as shown in the following example:
MyClass mc = new MyClass();
MyClass mc2 = mc;
Uma interface deve ser inicializada com um objeto de classe que a implementa.If MyClass implementa IMyInterface, você cria uma instância de IMyInterface conforme o exemplo a seguir:
IMyInterface iface = new MyClass();
Quando o objeto é criado, a memória é alocada no heap gerenciado e a variável armazena apenas uma referência ao local do objeto.Tipos no heap gerenciado exigem sobrecarga quando eles são alocados e quando eles são recuperados pela funcionalidade de gerenciamento automático de memória do CLR, que é conhecido sistema autônomo lixo coleção.No entanto, coleta de lixo é também altamente otimizada e na maioria dos cenários não criar um problema de desempenho.Para obter mais informações sobre a coleta de lixo, consulte Gerenciamento automático de memória.
Todos os arrays são tipos de referência, mesmo se os elementos são tipos de valor.Arrays derivam implicitamente o System.Array classe, mas você declara e usá-los com a sintaxe simplificada é fornecida pelo translation from VPE for Csharp, conforme mostrado no exemplo a seguir:
// Declare and initialize an array of integers.
int[] nums = { 1, 2, 3, 4, 5 };
// Access an instance property of System.Array.
int len = nums.Length;
Tipos de referência oferecem suporte completo para herança.Quando você criar uma classe, você pode herdar de qualquer Outros interface ou classe que não está definido sistema autônomo selado e Outross classes podem herdar de classe e substituem sistema autônomo métodos virtual.Para obter mais informações sobre como criar suas próprias classes, consulte Classes e estruturas (guia de programação translation from VPE for Csharp). Para obter mais informações sobre herança e métodos virtual, consulte Herança (Guia de programação C#).
Tipos de valores literal
Translation from VPE for Csharp, valores literal recebem um tipo de compilador.Você pode especificar como um literal numérico deve ser digitado anexando uma letra ao participante do número.Por exemplo, para especificar que o valor 4.56 deve ser tratado sistema autônomo uma float, anexe um "f" ou "F" após o número: 4.56f.Se nenhuma letra é anexada, o compilador irá inferir um tipo para o literal.Para obter mais informações sobre quais tipos podem ser especificados com letra sufixos, consulte as páginas de referência para os tipos individuais em Tipos valor (referência C#).
Porque literais são digitadas e todos sistema autônomo tipos derivam, por fim, de System.Object, você pode escrever e compilar código, sistema autônomo a seguir:
string s = "The answer is " + 5.ToString();
// Outputs: "The answer is 5"
Console.WriteLine(s);
Type type = 12345.GetType();
// Outputs: "System.Int32"
Console.WriteLine(type);
Tipos genéricos
Um tipo pode ser declarado com um ou mais parâmetros de tipo que servem sistema autônomo um espaço reservado para o tipo real (o tipo concreto) Esse código de cliente fornecerá quando ele cria uma instância do tipo.Esses tipos são chamados de tipos genéricos.Por exemplo, o .NET estrutura digite System.Collections.Generic.List<T> tem um parâmetro de tipo que, por convenção, receberá o nome T.Quando você cria uma instância do tipo, você pode especificar o tipo dos objetos que a lista conterá, por exemplo, seqüência de caracteres:
List<string> strings = new List<string>();
O uso do parâmetro de tipo torna possível reutilizar a mesma classe para conter qualquer tipo de elemento, sem precisar converter cada elemento em objeto. São chamados de classes de coleção genéricacoleções com fortemente tipado como o compilador sabe o tipo específico de elementos da coleção e pode gerar um erro em time de compilar se, por exemplo, você tentar adicionar um número inteiro para o strings objeto no exemplo anterior. Para obter mais informações, consulte Generics (Guia de programação C#) .
Tipos implícitos, tipos anônimo e tipos Nullable
Conforme mencionado anteriormente, você implicitamente pode digitar uma variável local (mas não sistema autônomo membros de classe) usando o var palavra-chave.A variável ainda recebe um tipo em time de compilar, mas o tipo é fornecido pelo compilador.Para obter mais informações, consulte Digitados implicitamente variáveis locais (guia de programação translation from VPE for Csharp).
Em alguns casos, é inconveniente criar um tipo nomeado para conjuntos simples de valores relacionados não pretender armazenar ou transmitir fora dos limites de método.Você pode criar tipos anônimo para essa finalidade.Para obter mais informações, consulte Tipos anônimo (guia de programação translation from VPE for Csharp).
Tipos comuns de valor não podem ter um valor de nulo.No entanto, você pode criar tipos de valor anulável, adicionando um ? Após o tipo. Por exemplo, int? é um int tipo que também pode ter o valor nulo.No CTS, tipos anuláveis são instâncias de struct genérico digite System.Nullable<T>. Tipos anuláveis são especialmente úteis quando você está passando dados para e de bancos de dados em que os valores numéricos podem ser nulo.Para obter mais informações, consulte Tipos anuláveis (guia de programação C#).
Seções relacionadas
Para obter mais informações, consulte os seguintes tópicos:
Elenco e conversões de tipo (guia de programação translation from VPE for Csharp)
Classes e estruturas (guia de programação translation from VPE for Csharp)
Tipos anônimo (guia de programação translation from VPE for Csharp)
Especificação da linguagem C#
Para obter mais informações sobre tipos, consulte as seções a seguir no Especificação da linguagem C#:
Tipos de 1,3 e variáveis
3.8 Namespace e nomes de tipos
4.1 Tipos de valor
4.2 Tipos de referência
4.3 conversão boxing e conversão conversão unboxing
Consulte também
Conceitos
Conversion of XML Tipos de Dados
Referência
Tipos de dados comparados em diferentes idiomas
Integral tabela Tipos (referência C#)
Outros recursos
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Adicionadas informações introdutórias e informações sobre declarações de tipo, o common type sistema, tipos de referência e valor, literais e tipos genéricos. |
Aprimoramento de informações. |