Προγραμματισμός

Πώς να εργαστείτε με προβληματισμό στο C #

Η αντανάκλαση στο C # χρησιμοποιείται για την ανάκτηση μεταδεδομένων σε τύπους κατά το χρόνο εκτέλεσης. Με άλλα λόγια, μπορείτε να χρησιμοποιήσετε την αντανάκλαση για να ελέγξετε δυναμικά τα μεταδεδομένα των τύπων στο πρόγραμμά σας - μπορείτε να ανακτήσετε πληροφορίες σχετικά με τα φορτωμένα συγκροτήματα και τους τύπους που ορίζονται σε αυτά. Η αντανάκλαση στο C # είναι παρόμοια με το RTTI (Runtime Type Information) του C ++.

Για να εργαστείτε με προβληματισμό στο .Net, θα πρέπει να συμπεριλάβετε το χώρο ονομάτων System.Reflection στο πρόγραμμά σας. Κατά τη χρήση της αντανάκλασης, λαμβάνετε αντικείμενα του τύπου "Τύπος" που μπορούν να χρησιμοποιηθούν για την αναπαράσταση συγκροτημάτων, τύπων ή ενοτήτων. Μπορείτε να χρησιμοποιήσετε την αντανάκλαση για να δημιουργήσετε μια παρουσία ενός τύπου δυναμικά και ακόμη να καλέσετε μεθόδους του τύπου.

Οι τύποι που ορίζονται στο χώρο ονομάτων System.Reflection περιλαμβάνουν τα ακόλουθα.

  • Συνέλευση
  • Μονάδα μέτρησης
  • Ενουμ
  • Μέθοδος πληροφοριών
  • Κατασκευαστής Πληροφορίες
  • Πληροφορίες μέλους
  • ΠαράμετροςInfo
  • Τύπος
  • Πληροφορίες πεδίου
  • EventInfo
  • Πληροφορίες ιδιοκτησίας

Ας σκάψουμε τώρα κάποιον κώδικα για να κάνουμε τον προβληματισμό σε δράση Εξετάστε την ακόλουθη τάξη που ονομάζεται Πελάτης.

πελάτης δημόσιας τάξης

    {

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά Διεύθυνση

        {

παίρνω; σειρά;

        }

    }

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να λάβετε το όνομα της τάξης και το όνομα χώρου ονομάτων της κλάσης πελατών χρησιμοποιώντας την αντανάκλαση:

Type type = typeof (Πελάτης);

Console.WriteLine ("Class:" + type.Name);

Console.WriteLine ("Namespace:" + type.Namespace);

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να ανακτήσετε τη λίστα των ιδιοτήτων της κλάσης πελατών και να εμφανίσετε τα ονόματά τους στο παράθυρο της κονσόλας:

static void Main (συμβολοσειρά [] args)

        {

Type type = typeof (Πελάτης);

PropertyInfo [] propertyInfo = type.GetProperties ();

Console.WriteLine ("Η λίστα ιδιοτήτων της κλάσης πελατών είναι: -");

foreach (PropertyInfo pInfo στο propertyInfo)

            {

Console.WriteLine (pInfo.Name);

            }

        }

Η μέθοδος GetProperties () της κλάσης Type επιστρέφει έναν πίνακα τύπου PropertyInfo - αυτή είναι στην πραγματικότητα μια λίστα με τις δημόσιες ιδιότητες του τύπου σας. Στη συνέχεια, μπορείτε να επαναλάβετε αυτόν τον πίνακα και να ανακτήσετε τα ονόματα καθεμιάς από τις δημόσιες ιδιότητες που ορίζονται στον τύπο σας. Δεδομένου ότι η κατηγορία πελατών ορίζει τρεις ιδιότητες, τα ονόματα και των τριών αυτών ιδιοτήτων θα εμφανίζονται στην κονσόλα όταν εκτελείται αυτό το πρόγραμμα.

Δείτε πώς μπορούμε να εμφανίσουμε τα μεταδεδομένα των κατασκευαστών και τις δημόσιες μεθόδους ενός τύπου χρησιμοποιώντας ανακλαστικό. Ας επανεξετάσουμε την κλάση πελατών που δημιουργήσαμε νωρίτερα και ενσωματώστε δύο μεθόδους - έναν προεπιλεγμένο κατασκευαστή και μια μέθοδο που ονομάζεται Επικύρωση που χρησιμοποιείται για την επικύρωση του αντικειμένου πελάτη που του παραδόθηκε ως παράμετρος. Αυτή θα ήταν η τροποποιημένη έκδοση της κλάσης πελατών.

πελάτης δημόσιας τάξης

    {

δημόσιος πελάτης ()

        {

// Προεπιλεγμένος κατασκευαστής

        }

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά Διεύθυνση

        {

παίρνω; σειρά;

        }

δημόσια bool Επικύρωση (Customer customerObj)

        {

// Κωδικός για την επικύρωση του αντικειμένου πελάτη

επιστροφή αληθινή?

        }

    }

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

Type type = typeof (Πελάτης);

ConstructorInfo [] constructorInfo = type.GetConstructors ();

Console.WriteLine ("Η κλάση πελατών περιέχει τους ακόλουθους Κατασκευαστές: -");

foreach (ConstructorInfo γ στο buildorInfo)

  {

Κονσόλα.WriteLine (c);

  }

Σημειώστε ότι η μέθοδος GetConstructors () της κλάσης Type επιστρέφει έναν πίνακα τύπου ConstructorInfo που περιέχει τη λίστα όλων των δημόσιων κατασκευαστών που ορίζονται στον τύπο που ανακλάται.

ΕΝΤΑΞΕΙ; ας εμφανίσουμε τώρα τα ονόματα όλων των δημόσιων μεθόδων της κλάσης πελατών - πάλι, έχουμε μόνο ένα, ώστε το όνομα μιας μόνο μεθόδου να εμφανίζεται στην κονσόλα όταν εκτελείται το πρόγραμμα που δίνεται στη συνέχεια. Ακολουθεί η λίστα κωδικών για την αναφορά σας.

static void Main (συμβολοσειρά [] args)

 {

Type type = typeof (Πελάτης);

MethodInfo [] methodInfo = type.GetMethods ();

  Console.WriteLine ("Οι μέθοδοι της κλάσης πελατών είναι: -");

foreach (θερμοκρασία MethodInfo στο methodInfo)

            {

Console.WriteLine (temp.Name);

            }

Κονσόλα. Διαβάστε ();

        }

Σημειώστε ότι ενδέχεται να εμφανιστούν επίσης τα ονόματα μερικών πρόσθετων μεθόδων (ToString, Equals, GetHashCode, GetType). Αυτές οι μέθοδοι κληρονομούνται από την κατηγορία αντικειμένων - οποιαδήποτε κλάση στο .Net προέρχεται από την κλάση αντικειμένων από προεπιλογή

Μπορείτε επίσης να επαναλάβετε τα χαρακτηριστικά μιας μεθόδου. Εάν έχουν καθοριστεί προσαρμοσμένα χαρακτηριστικά για τις μεθόδους σας, μπορείτε να χρησιμοποιήσετε τη μέθοδο GetCustomAttributes στην παρουσία της κλάσης MethodInfo για να ανακτήσετε τα χαρακτηριστικά της μεθόδου. Δείτε πώς μπορείτε να το επιτύχετε.

foreach (MethodInfo temp in methodInfo)

 {

foreach (Χαρακτηριστικό γνώρισμα στο temp.GetCustomAttributes (true))

     {

// Γράψτε τον συνηθισμένο κωδικό σας εδώ

     }

  }

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