Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 31087|Απάντηση: 0

[Πηγή] C# Ημερολόγιο εκμάθησης ανώνυμου τύπου

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 16/10/2020 5:41:04 μ.μ. | | | |
Όταν δεν θέλουμε να ορίσουμε σύνθετες όπως σύνθετες μεθόδους, συμβάντα και κατασκευαστές, μπορούμε να δημιουργήσουμε δυναμικά έναν προσαρμοσμένο τύπο δεδομένων -> ανώνυμο τύπο.

1. Καθορίστε τον τύπο της ανωνυμίας

Όταν ορίζετε έναν ανώνυμο τύπο, πρέπει να χρησιμοποιήσετε τη λέξη-κλειδί var και τη σύνταξη αρχικοποίησης αντικειμένου.

var: Ο μεταγλωττιστής δημιουργεί αυτόματα έναν νέο ορισμό κλάσης κατά τη στιγμή της μεταγλώττισης (δεν μπορούμε να δούμε το όνομα της κλάσης στον κώδικα C#).

Αρχικοποίηση: Θα πει στον μεταγλωττιστή να δημιουργήσει ιδιωτικά πεδία φόντου και ιδιότητες (μόνο για ανάγνωση) για τον τύπο που δημιουργήθηκε πρόσφατα.

Κατασκευάστε έναν ανώνυμο τύπο περνώντας παραμέτρους και εκτυπώστε τις σχετικές πληροφορίες



Κλήση: Οι ανώνυμοι τύποι μπορούν επίσης να κατασκευαστούν χρησιμοποιώντας σκληρό κώδικα



2. Εσωτερική αναπαράσταση ανώνυμων τύπων

Όλοι οι ανώνυμοι τύποι κληρονομούν αυτόματα από το αντικείμενο, ώστε να μπορούμε να χρησιμοποιήσουμε ToString, GetHashCode, Equals στο αντικείμενο αυτοκινήτου, ας δοκιμάσουμε να το ονομάσουμε αυτό:



Προσκλήσεις και αποτελέσματα:







Ο τύπος του αντικειμένου car είναι: <>f__AnonymousType03 (το δικό σας μπορεί να είναι διαφορετικό), το όνομα του ανώνυμου τύπου γίνεται αισθητό από τον μεταγλωττιστή, δεν μπορούμε να παρέμβουμε, κώδικας CIL.

3. Υλοποίηση των μεθόδων ToString() και GetHashCode().

1.ToString()



2.GetHashCode()

Χρησιμοποιεί τη μεταβλητή κάθε ανώνυμου τύπου για να υπολογίσει την τιμή κατακερματισμού ως είσοδο τύπου του System.Collections.Generic.EqualityComparer και <T>παράγει την ίδια τιμή κατακερματισμού μόνο εάν οι δύο ανώνυμοι τύποι έχουν τις ίδιες ιδιότητες και τους δίνεται η ίδια τιμή.

4. Ίση σημασιολογία ανώνυμων τύπων

Ισούται με()





Αναλύστε τα αποτελέσματα:

1. Equals(): Ο μεταγλωττιστής παρακάμπτει το Equals() για να προσδιορίσει ότι τα αντικείμενα είναι ίσα με βάση τη σημασιολογία τιμών (π.χ. σημειώνει την τιμή κάθε μέλους δεδομένων δύο αντικειμένων)

2. == Τελεστές: Επειδή οι ανώνυμοι τύποι δεν υπερφορτώνουν τους ισοδύναμους τελεστές (== , !=), το == συγκρίνει τις αναφορές, όχι το περιεχόμενο.

3. GetType(): Επειδή αν δηλώσουμε δύο πανομοιότυπους (με τα ίδια χαρακτηριστικά) ανώνυμους τύπους στο ίδιο συγκρότημα, ο μεταγλωττιστής θα δημιουργήσει μόνο έναν ορισμό ενός ανώνυμου τύπου.

5. Ανώνυμοι τύποι που περιέχουν ανώνυμους τύπους



Περίληψη:

Στην πραγματικότητα, θα πρέπει να είμαστε προσεκτικοί σχετικά με τη χρήση ανώνυμων τύπων, ειδικά όταν χρησιμοποιούμε LINQ, και να μην εγκαταλείπουμε ποτέ τη χρήση κλάσεων ή δομών με ισχυρούς τύπους λόγω της εμφάνισης ανώνυμων τύπων.

Στην πραγματικότητα, ο ίδιος ο ανώνυμος τύπος έχει πολλούς περιορισμούς:

  • Δεν ελέγχετε το όνομα του ανώνυμου τύπου
  • Οι ανώνυμοι τύποι κληρονομούν το System.Object
  • Οι ανώνυμοι τύποι πεδίων και χαρακτηριστικών είναι πάντα μόνο για ανάγνωση
  • Οι ανώνυμοι τύποι δεν υποστηρίζουν συμβάντα, προσαρμοσμένες μεθόδους, προσαρμοσμένους τελεστές και προσαρμοσμένες επανεγγραφές
  • Οι ανώνυμοι τύποι σφραγίζονται σιωπηρά
  • Η δημιουργία οντοτήτων ανώνυμων τύπων χρησιμοποιεί μόνο τον προεπιλεγμένο κατασκευαστή


Εάν πρέπει να ορίσουμε γρήγορα το σχήμα μιας οντότητας χωρίς να ορίσουμε τη λειτουργία της, μπορούμε να χρησιμοποιήσουμε τον ανώνυμο τύπο.




Προηγούμενος:Τα δεδομένα του SQL Server εξάγονται ως δέσμη ενεργειών εισαγωγής
Επόμενος:.net/C# αντικατοπτρίζει μη ανώνυμες συναρτήσεις &lt;&gt;f__AnonymousType0 μεθόδους
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com