Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 31087|Resposta: 0

[Fonte] Diário de Aprendizagem do Tipo Anônimo em C#

[Copiar link]
Publicado em 16/10/2020 17:41:04 | | | |
Quando não queremos definir classes complexas como métodos complexos, eventos e construtores complexos, podemos gerar dinamicamente um tipo de dado personalizado -> tipo anônimo.

1. Defina o tipo de anonimato

Ao definir um tipo anônimo, você precisa usar a palavra-chave var e a sintaxe de inicialização de objetos.

var: O compilador gera automaticamente uma nova definição de classe em tempo de compilação (não conseguimos ver o nome da classe no código C#).

Inicialização: Ele informará o compilador para criar campos privados de fundo e propriedades (somente leitura) para o tipo recém-criado.

Construa um tipo anônimo passando parâmetros e imprima as informações relevantes



Chamada: Tipos anônimos também podem ser construídos usando hardcode



2. Representação interna de tipos anônimos

Todos os tipos anônimos herdam automaticamente do Object, então podemos usar ToString, GetHashCode, Equals no objeto car, vamos tentar chamar isso:



Decisões e resultados:







O tipo do objeto carro é: <>f__AnonymousType03 (o seu pode ser diferente), o nome anônimo do tipo é sentido pelo compilador, não podemos interferir, código CIL.

3. Implementação dos métodos ToString() e GetHashCode().

1. ToString()



2.GetHashCode()

Ele usa a variável de cada tipo anônimo para calcular o valor de hash como entrada de tipo de System.Collections.Generic.EqualityComparer, e só <T>produz o mesmo valor de hash se os dois tipos anônimos tiverem as mesmas propriedades e receberem o mesmo valor.

4. Semântica igual dos tipos anônimos

Iguais()





Analise os resultados:

1. Equals(): O compilador sobrescreve Equals() para determinar que os objetos são iguais com base na semântica de valores (por exemplo, anota o valor de cada membro de dados de dois objetos)

2. == Operadores: Como tipos anônimos não sobrecarregam operadores equivalentes (== , !=), == compara referências, não conteúdo.

3. GetType(): Porque se declararmos dois tipos anônimos idênticos (com os mesmos atributos) na mesma assembleia, o compilador gerará apenas uma definição de um tipo anônimo.

5. Tipos anônimos que contêm tipos anônimos



Resumo:

Na verdade, devemos ter cautela ao usar tipos anônimos, especialmente ao usar LINQ, e nunca desistir de usar classes ou estruturas fortemente tipadas devido ao surgimento de tipos anônimos.

Na verdade, o próprio tipo anônimo tem muitas limitações:

  • Você não controla o nome do tipo anônimo
  • Tipos anônimos herdam System.Object
  • Tipos anônimos de campos e atributos são sempre somente leitura
  • Tipos anônimos não suportam eventos, métodos personalizados, operadores personalizados e reescritas personalizadas
  • Tipos anônimos são implicitamente selados
  • A criação de entidades de tipos anônimos usa apenas o construtor padrão


Se precisarmos definir rapidamente a forma de uma entidade sem definir sua função, podemos usar o tipo anônimo.




Anterior:Os dados do SQL Server são exportados como um script de inserção
Próximo:.net/C# reflete funções &lt;&gt;f__AnonymousType0 métodos não anônimos
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com