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

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

[Πηγή] Χρήση δυναμικού σε C# 4.0

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 7/7/2016 10:23:00 π.μ. | | |
Η C# 4.0 εισάγει έναν νέο τύπο: δυναμικό, ο οποίος είναι στατικός τύπος, αλλά μια παρουσία αντικειμένου αυτού του τύπου μπορεί να παρακάμψει τη διαδικασία ελέγχου στατικού τύπου. Στις περισσότερες περιπτώσεις, το κείμενο λειτουργεί σαν κλάση αντικειμένου. Κατά τη στιγμή της μεταγλώττισης, ένα στιγμιότυπο μιας δυναμικής κλάσης υποστηρίζει οποιαδήποτε λειτουργία, επομένως δεν χρειάζεται να ανησυχείτε για το εάν το αντικείμενο λαμβάνεται από ένα COM API ή μια δυναμική γλώσσα όπως η IronPython, από το HTML DOM ή από ανάκλαση ή κάπου αλλού στο πρόγραμμα. Ωστόσο, εάν ο κώδικας κάνει κάτι μη έγκυρο, το σφάλμα εντοπίζεται κατά το χρόνο εκτέλεσης.
Για παράδειγμα, το παράδειγμα μεθόδου exampleMethod1 στο ακόλουθο απόσπασμα κώδικα έχει μόνο μία παράμετρο και ο μεταγλωττιστής μπορεί να αναγνωρίσει ότι δεν είναι έγκυρη όταν καλεί το ec.exampleMethod1(10,4) κατά το χρόνο μεταγλώττισης. Αυτό είναι ένα σφάλμα μεταγλώττισης. Η δεύτερη κλήση dynamic_ec.exampleMethod1(10,4) δεν ελέγχεται για στατικούς τύπους. Επομένως, ο μεταγλωττιστής δεν αναφέρει σφάλματα μεταγλώττισης. Ωστόσο, το σφάλμα δεν κρύβεται για πάντα. Θα πιαστεί κατά το χρόνο εκτέλεσης και θα ενεργοποιήσει μια εξαίρεση χρόνου εκτέλεσης.
στατικό κενό Main(string[] args){
    ExampleClass ec = νέα ExampleClass();
    δυναμική dynamic_ec = νέα ExampleClass();
    dynamic_ec.παράδειγμαμεθόδου1(10, 4)·
    dynamic_ec.someMethod("κάποιο όρισμα", 7, null);
    dynamic_ec.nonexistentMethod();
}
κλάση ExampleClass {
    public ExampleClass() { }
    public ExampleClass(int v) { }
    δημόσιο κενό παράδειγμαΜέθοδος1(int i) { }
    δημόσιο κενό παράδειγμαMethod2(string str) { }
}
Ακολουθεί ένα παράδειγμα χρήσης δυναμικής για την κλήση IronPython:

χρησιμοποιώντας το IronPython.Hosting.
χρησιμοποιώντας το Microsoft.scrip{filtering}ting. Φιλοξενία;

Console.WriteLine("Φόρτωση random.py...");
scrip{filter}tRuntime py = Python.CreateRuntime();
δυναμικό τυχαίο = py. UseFile("random.py");
Console.WriteLine("random.py φορτώθηκε!");
var items = Enumerable.Range(1, 7). ToArray();

για (int s = 0; s < 10000; s++) {
    random.shuffle(αντικείμενα);
    Console.Write("Ακολουθία {0}: ", s);
    foreach (int i σε τεκμήρια) {
        Console.Write("{0} ", i);
    }
    Console.WriteLine();
}

Για αντικείμενα ή εκφράσεις δυναμικού τύπου, ο ρόλος του μεταγλωττιστή είναι να ενσωματώσει τις ενέργειες που αναμένεται να εκτελέσει κάθε παράσταση και κατά τη στιγμή της εκτέλεσης, να ελέγξει τις αποθηκευμένες πληροφορίες και τυχόν μη έγκυρες προτάσεις θα ενεργοποιήσουν μια εξαίρεση χρόνου εκτέλεσης.
Ο τύπος του αποτελέσματος των περισσότερων δυναμικών λειτουργιών είναι επίσης δυναμικός. Για παράδειγμα, εάν τοποθετήσετε το δείκτη του ποντικιού σας πάνω από το testSum στο παρακάτω παράδειγμα, η έξυπνη προτροπή θα εμφανίσει ένα (τοπική μεταβλητή) δυναμικό testSum.
δυναμικό d = 1;
var testSum = d + 3;
Τοποθετήστε το δείκτη του ποντικιού πάνω από το testSum παρακάτω.
System.Console.WriteLine(δοκιμαστικό άθροισμα);

Μετατροπή τύπου
Η μετάβαση μεταξύ παρουσιών δυναμικού τύπου και άλλων τύπων παρουσιών είναι απλή και οι προγραμματιστές μπορούν εύκολα να κάνουν εναλλαγή μεταξύ δυναμικών και μη δυναμικών συμπεριφορών. Οποιαδήποτε παρουσία μπορεί να μετατραπεί έμμεσα σε παρουσία δυναμικού τύπου, δείτε το ακόλουθο παράδειγμα:
δυναμικό d1 = 7;
δυναμικό d2 = "μια συμβολοσειρά";
δυναμικό d3 = System.DateTime.Today·
δυναμικό d4 = System.Diagnostics.Process.GetProcesses();

Αντίθετα, μια έμμεση μετατροπή μπορεί να εφαρμοστεί δυναμικά σε οποιαδήποτε έκφραση δυναμικού τύπου.
Και αντίστροφα, οποιαδήποτε έκφραση δυναμικού τύπου μπορεί επίσης να μετατραπεί σιωπηρά σε άλλους τύπους.
int i = d1;
συμβολοσειρά str = d2;
Ημερομηνία/Ώρα dt = d3;
System.Diagnostics.Process[] procs = d4;

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

DLR χρόνου εκτέλεσης δυναμικής γλώσσας
Ο χρόνος εκτέλεσης δυναμικής γλώσσας είναι . Το NET Framework 4 Beta 1 είναι ένα νέο σύνολο API που παρέχουν υποστήριξη για δυναμικούς τύπους σε C# και εφαρμόζουν επίσης δυναμικές γλώσσες προγραμματισμού όπως IronPython και IronRuby.

Διαλειτουργικότητα των Ευρωπαϊκών Κοινοτήτων
Το C# 4.0 περιλαμβάνει πολλές δυνατότητες που βελτιώνουν τη διαλειτουργικότητα με τις παραδοσιακές διεπαφές COM API, όπως η αυτοματοποίηση του Office. Οι δυναμικοί τύποι, οι επώνυμες παράμετροι και οι προαιρετικές παράμετροι αποτελούν επίσης μέρος της βελτίωσης.
Πολλές μέθοδοι COM επιτρέπουν στις παραμέτρους τους και στις τιμές επιστροφής να είναι αντικειμένου τύπου, επομένως για γλώσσες με ισχυρούς τύπους όπως η C#, απαιτείται πολλή αναγκαστική μετατροπή τύπου. Ωστόσο, στη C# 4.0, εάν προσθέσετε την επιλογή /link κατά τη μεταγλώττιση, ο δυναμικός τύπος έχει ένα νέο αποτέλεσμα: κάνει τον τύπο αντικειμένου (τύπος παραμέτρου ή τύπος επιστροφής) στην υπογραφή της μεθόδου διεπαφής COM να θεωρείται δυναμικός, αποφεύγοντας έτσι πολλές μετατροπές τύπου. Για παράδειγμα, η ακόλουθη δήλωση έρχεται σε αντίθεση με αυτό.
Δεν χρησιμοποιείται δυναμικά.
((Excel.Range)Excel. Κύτταρα[1, 1]). Τιμή2 = "Όνομα";
Εύρος εύρους Excel.Range = (Εύρος_Excel)excel. Κύτταρα[1, 1];

Ήταν δυναμική.
Προέχω. Κύτταρα[1, 1]. Τιμή = "Όνομα";
Εύρος εύρους Excel.Range = excel. Κύτταρα[1, 1];




Προηγούμενος:MVC ΆΓΙΑΞ. Η σελίδα BeginForm() υποβάλλεται ασύγχρονα
Επόμενος:Ένα διαφορετικό αντικείμενο με την ίδια τιμή αναγνωριστικού είχε ήδη συσχετιστεί με...
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com