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. |