Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 31087|Risposta: 0

[Fonte] Diario di apprendimento di tipo anonimo in C#

[Copiato link]
Pubblicato su 16/10/2020 17:41:04 | | | |
Quando non vogliamo definire classi complesse come metodi complessi, eventi e costruttori, possiamo generare dinamicamente un tipo di dato personalizzato -> tipo anonimo.

1. Definire il tipo di anonimato

Quando si definisce un tipo anonimo, è necessario utilizzare la parola chiave var e la sintassi di inizializzazione degli oggetti.

var: Il compilatore genera automaticamente una nuova definizione di classe in tempo di compilazione (non possiamo vedere il nome della classe nel codice C#).

Inizializzazione: Indicherà al compilatore di creare campi di background privati e proprietà (di sola lettura) per il tipo appena creato.

Costruisci un tipo anonimo passando i parametri e stampando le informazioni rilevanti



Chiamata: I tipi anonimi possono anche essere costruiti usando hardcode



2. Rappresentazione interna di tipi anonimi

Tutti i tipi anonimi ereditano automaticamente da Object, quindi possiamo usare ToString, GetHashCode, Equals sull'oggetto car, proviamo a chiamare questo:



Chiamate e risultati:







Il tipo dell'oggetto auto è: <>f__AnonymousType03 (il tuo potrebbe essere diverso), il nome anonimo del tipo è percepito dal compilatore, non possiamo interferire, codice CIL.

3. Implementazione dei metodi ToString() e GetHashCode().

1.ToString()



2.GetHashCode()

Utilizza la variabile di ciascun tipo anonimo per calcolare il valore hash come input di tipo di System.Collections.Generic.EqualityComparer, e <T>produce lo stesso valore hash solo se i due tipi anonimi hanno le stesse proprietà e ricevono lo stesso valore.

4. Semantica uguale dei tipi anonimi

Uguali()





Analizza i risultati:

1. Equals(): Il compilatore sovrascrive Equals() per determinare che gli oggetti sono uguali basandosi sulla semantica dei valori (ad esempio, annota il valore di ogni membro dati di due oggetti)

2. == Operatori: Poiché i tipi anonimi non sovraccaricano gli operatori equivalenti (== , !=), == confronta i riferimenti, non il contenuto.

3. GetType(): Perché se dichiariamo due tipi anonimi identici (con gli stessi attributi) nello stesso assembly, il compilatore genererà una definizione di un solo tipo anonimo.

5. Tipi anonimi che contengono tipi anonimi



Sommario:

Anzi, dovremmo essere cauti nell'usare tipi anonimi, specialmente quando si usa LINQ, e non rinunciare mai all'uso di classi o strutture fortemente tipate a causa dell'emergere di tipi anonimi.

In effetti, il tipo anonimo stesso presenta molte limitazioni:

  • Non controlli il nome del tipo anonimo
  • I tipi anonimi ereditano System.Object
  • I tipi anonimi di campi e attributi sono sempre di sola lettura
  • I tipi anonimi non supportano eventi, metodi personalizzati, operatori personalizzati e riscritture personalizzate
  • I tipi anonimi sono implicitamente sigillati
  • La creazione di entità di tipi anonimi utilizza solo il costruttore predefinito


Se dobbiamo definire rapidamente la forma di un'entità senza definirne la funzione, possiamo usare il tipo anonimo.




Precedente:I dati di SQL Server vengono esportati come script di inserimento
Prossimo:.net/C# riflette funzioni &lt;&gt;f__AnonymousType0 metodi non anonimi
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com