Partilhar via


Comparação de tipos nomeados e anônimos

O formato usado para declarar uma instância de um tipo anônimo lembra o formato que você usa quando você declara uma instância de um tipo nomeado usando um inicializador de objeto.No entanto, existem diferenças importantes no resultado.

Declarações

No exemplo a seguir, product1 é uma instância de um tipo anônimo e product2 é uma instância da classe Product.Ambas as declarações usam uma lista de inicialização em suas declarações.A única diferença sintática entre as duas declarações é que nenhum tipo de dados foi especificada após New para product1.Isso torna um tipo anônimo.

' Variable product1 is an instance of an anonymous type.
Dim product1 = New With {.Name = "paperclips", .Price = 1.29}

A variável product1 é fortemente tipada como uma instância de um tipo anônimo.O compilador define o tipo de acordo com para as propriedades que você especificar na declaração.O compilador usa Inferência de tipos local para determinar os tipos de dados das propriedades dos valores iniciais que você fornecer.Nesse exemplo, o tipo anônimo contém as propriedades Name e Price,e os tipos são inferidos como String e Double,respectivamente.

Observação:

No exemplo anterior, nenhuma das propriedades são especificadas como propriedades chave.Portanto , as propriedades Não há papel determinar se duas instâncias da mesmo   type são iguais ou o que o hash valor de código da instance é .No entanto, o valores as propriedades pode ser alterada , enquanto os valores das propriedades de chave são somente leitura .Para obter mais informações sobre propriedades de chave, consulte Tipos anônimos.

No exemplo a seguir, product2 é fortemente tipada como uma instância da classe Product.Os dois Name e Price devem ser membros da classe Product,e seus tipos devem ser compatíveis com os valores fornecidos na declaração.

' Variable product2 is an instance of Product.
Dim product2 = New Product With {.Name = "paperclips", .Price = 1.29}

Para obter mais informações, consulte Inicializadores de objeto: Tipos nomeados e anônimo.

Distinções

A lista a seguir compara outros aspectas das duas declarações:

  • Inferência de tipos local determina que product1 é uma instância de um tipo anônimo e que product2 é uma instância de classe Product.Não há nenhuma cláusula As em qualquer declaração, embora a paraproduct2 cláusula As seja opcional.

    • Como tipos anônimos não tem os nomes especificados, você não pode usar uma cláusula As para declarar product1.Seu tipo deve ser inferido.Isso limita o uso dos tipos anônimos para variáveis locais.

    • Como product2 é instância de um tipo nomeado, Product,você pode declará-lo sem usar inferência de tipos utilizando uma cláusula As.

      Dim product2a As New Product With {.Name = "paperclips", .Price = 1.29}
      
  • Se um construtor apropriado é definido em Product, product2 pode ser declarada e inicializado sem utilizar um inicializador de objeto.

    Dim product2b As New Product("paperclips", 1.29)
    

    Como alternativa, a série de instruções a seguir tem o mesmo efeito.

    Dim product2c As New Product
    product2c.Name = "paperclips"
    product2c.Price = 1.29
    

    Nenhum declarações semelhantes são possíveis para product1 porque suas propriedades são chamadas e definidas na própria lista inicializadora.

  • Como product1,product2 e suas propriedades são todos fortemente tipados, você pode usar o IntelliSense para navegar pelo código que usa o objeto.

    Cuidado:

    O nome do anônimo   type é gerado, do compilador e Ele pode variar de compilação a compilação.Seu código não deve usar ou contar com o nome de um tipo anônimo porque o nome pode mudar quando um projeto é recompilado.

Consulte também

Tarefas

Como: Declare uma instância de um tipo anônimo

Como: Inferir tipos na declaração de tipo anônimo e nomes de propriedade

Conceitos

Tipos anônimos

Inferência de tipos local

Referência

Key (Visual Basic)