Ενότητες, δομές και κλάσεις

Υπάρχουν μόνο τρεις τρόποι να οργανωθεί ένα VB.NET εφαρμογή.

  • Ενότητες
  • Δομές
  • Μαθήματα

Αλλά τα περισσότερα τεχνικά άρθρα υποθέτουν ότι γνωρίζετε ήδη όλα αυτά. Αν είστε ένας από τους πολλούς που εξακολουθούν να έχουν μερικές ερωτήσεις, θα μπορούσατε να διαβάσετε μόνο παρελθόν τα μπερδεμένα κομμάτια και να προσπαθήσετε να το καταλάβετε ούτως ή άλλως. Και αν έχετε ένα παρτίδα του χρόνου, μπορείτε να ξεκινήσετε την αναζήτηση Η Microsoft τεκμηρίωση:

  • "Μια ενότητα είναι ένα φορητό εκτελέσιμο αρχείο, όπως type.dll ή application.exe, που αποτελείται από μία ή περισσότερες κλάσεις και διεπαφές."
  • "Μια εντολή κλάσης ορίζει έναν νέο τύπο δεδομένων."
  • "Η δήλωση δομής ορίζει έναν σύνθετο τύπο τιμής που μπορείτε να προσαρμόσετε."

Ακριβώς τότε. Καμιά ερώτηση?

Για να είναι λίγο πιο δίκαιο στη Microsoft, έχουν σελίδες και σελίδες (και περισσότερες σελίδες) πληροφοριών για όλα αυτά που μπορείτε να περάσετε. Και πρέπει να είναι όσο το δυνατόν πιο ακριβείς, επειδή θέτουν το πρότυπο. Με άλλα λόγια, η τεκμηρίωση της Microsoft μερικές φορές διαβάζεται σαν ένα βιβλίο δικαίου γιατί είναι ένα βιβλίο δικαίου.

instagram viewer

Αλλά αν είστε απλά εκμάθησης. NET, μπορεί να είναι πολύ συγκεχυμένη! Πρέπει να ξεκινήσετε κάπου. Η κατανόηση των τριών βασικών τρόπων που μπορείτε να γράψετε κώδικα στο VB.NET είναι ένα καλό μέρος για να ξεκινήσετε.

Μπορείς να γράψεις VB.NET κώδικα χρησιμοποιώντας οποιαδήποτε από αυτές τις τρεις μορφές. Με άλλα λόγια, μπορείτε να δημιουργήσετε ένα Εφαρμογή κονσόλας στο VB.NET Express και γράψτε:

Μονάδα ενότητας1
Sub Main ()
MsgBox ("Αυτή είναι μια ενότητα!")
End Sub
Ενότητα τελών
Κλάση Κλάσης1
Sub Main ()
MsgBox ("Αυτή είναι μια κλάση")
End Sub
Τέλος κλάσης
Δομή δομής1
Dim myString ως συμβολοσειρά
Sub Main ()
MsgBox ("Αυτή είναι μια δομή")
End Sub
Δομή τελών

Αυτό δεν κάνει όποιος αίσθηση ως πρόγραμμα, φυσικά. Το θέμα είναι ότι δεν έχετε ένα συντακτικό σφάλμα, ώστε να είναι "νόμιμο" VB.NET κώδικα.

Αυτές οι τρεις μορφές είναι ο μόνος τρόπος για να κωδικοποιήσετε τη βασίλισσα της ρίζας όλων των .NET: το αντικείμενο. Το μόνο στοιχείο που διακόπτει τη συμμετρία των τριών μορφών είναι η δήλωση: Dim myString ως συμβολοσειρά. Αυτό έχει να κάνει με μια δομή που είναι "σύνθετος τύπος δεδομένων" όπως δηλώνει η Microsoft στον ορισμό τους.

Ένα άλλο πράγμα που πρέπει να παρατηρήσετε είναι ότι και τα τρία μπλοκ έχουν ένα Sub Main () σε αυτούς. Μία από τις πιο θεμελιώδεις αρχές του OOP καλείται συνήθως ενθυλάκωση. Αυτό είναι το φαινόμενο "μαύρο κουτί". Με άλλα λόγια, θα πρέπει να είστε σε θέση να αντιμετωπίζετε κάθε αντικείμενο ανεξάρτητα και αυτό περιλαμβάνει τη χρήση ομοιόμορφα ονομαστικών υπορουτίνων αν θέλετε.

Μαθήματα

Οι τάξεις είναι το «σωστό» μέρος για να ξεκινήσετε γιατί, όπως Microsoft σημειώνει, "Μια κλάση είναι ένα θεμελιώδες δομικό στοιχείο του αντικειμενοστρεφούς προγραμματισμού (OOP)." Στην πραγματικότητα, ορισμένοι συγγραφείς αντιμετωπίζουν τις ενότητες και τις δομές ως ακριβώς ειδικές κατηγορίες τάξεων. Μια τάξη είναι περισσότερο προσανατολισμένη στο αντικείμενο από μια ενότητα, επειδή είναι δυνατό να instantiate (κάντε ένα αντίγραφο) μιας κλάσης, αλλά όχι μια ενότητα.

Με άλλα λόγια, μπορείτε να κωδικοποιήσετε ...

Δημόσια Κλάση1
Private Sub Form1_Load (_
ByVal αποστολέας ως σύστημα. Αντικείμενο, _
ByVal e ως σύστημα. EventArgs) _
Χειρίζεται MyBase. Φορτώνω
Dim myNewClass ως Class1 = Νέα Class1
myNewClass. ClassSub ()
End Sub
Τέλος κλάσης

(Η παράδοση της κλάσης τονίζεται.)

Δεν έχει σημασία αν η ίδια η ίδια η τάξη, στην περίπτωση αυτή, ...

Κλάση δημόσιας τάξης1
Sub ClassSub ()
MsgBox ("Αυτή είναι μια κλάση")
End Sub
Τέλος κλάσης

... είναι σε αρχείο από μόνο του ή είναι μέρος του ίδιου αρχείου με το Form1 κώδικας. Το πρόγραμμα λειτουργεί ακριβώς με τον ίδιο τρόπο. (Σημειώσε ότι Form1 είναι επίσης μια τάξη.)

Μπορείτε επίσης να γράψετε κώδικα τάξης που συμπεριφέρεται σαν μια ενότητα, δηλαδή χωρίς να το δημιουργήσετε. Αυτό ονομάζεται a Κοινόχρηστο τάξη. Το άρθρο "Στατικό" (δηλαδή "Κοινόχρηστο") σε σχέση με τους Δυναμικούς Τύπους στο VB.NET εξηγεί αυτό με περισσότερες λεπτομέρειες.

Ένα άλλο γεγονός σχετικά με τις τάξεις θα πρέπει επίσης να λαμβάνεται υπόψη. Μέλη (ιδιότητες και μέθοδοι) της κλάσης υπάρχουν μόνο ενώ υπάρχει η παρουσία της κλάσης. Το όνομα γι 'αυτό είναι το πεδίο εφαρμογής. Αυτό είναι το πεδίο εφαρμογής της παρουσίας μιας τάξης είναι περιορισμένη. Ο παραπάνω κώδικας μπορεί να αλλάξει για να επεξηγήσει αυτό το σημείο με αυτόν τον τρόπο:

Δημόσια Κλάση1
Private Sub Form1_Load (_
ByVal αποστολέας ως σύστημα. Αντικείμενο, _
ByVal e ως σύστημα. EventArgs) _
Χειρίζεται MyBase. Φορτώνω
Dim myNewClass ως Class1 = Νέα Class1
myNewClass. ClassSub ()
myNewClass = Τίποτα
myNewClass. ClassSub ()
End Sub
Τέλος κλάσης

Όταν το δεύτερο myNewClass. ClassSub () εκτελείται δήλωση, α NullReferenceException σφάλμα ρίχνεται επειδή το ClassSub μέλος δεν υπάρχει.

Ενότητες

Στο VB 6, ήταν κοινό να δούμε προγράμματα όπου το μεγαλύτερο μέρος του κώδικα ήταν σε μια ενότητα (Α .BAS, αντί για παράδειγμα, σε αρχείο a Μορφή αρχείο όπως Form1.frm.) Στο VB.NET, υπάρχουν δύο ενότητες και κλάσεις .ΒΒ αρχεία. Οι βασικές ενότητες αιτιών που περιλαμβάνονται στο VB.NET είναι να δώσουν στους προγραμματιστές έναν τρόπο να οργανώσουν τα συστήματά τους τοποθετώντας κώδικα σε διαφορετικούς χώρους για να τελειοποιήσουν το πεδίο εφαρμογής και την πρόσβαση για τους κώδικας. (Δηλαδή, πόσο καιρό υπάρχουν τα μέλη της ενότητας και ποιος άλλος κώδικας μπορεί να αναφέρει και να χρησιμοποιήσει τα μέλη.) Μερικές φορές, ίσως θελήσετε να τοποθετήσετε τον κώδικα σε ξεχωριστές μονάδες μόνο για να διευκολύνετε την εργασία σας.

Όλες οι ενότητες VB.NET είναι Κοινόχρηστο επειδή δεν μπορούν να παρουσιαστούν (βλ. παραπάνω) και μπορούν να επισημανθούν Φίλος ή Δημόσιο ώστε να μπορούν να έχουν πρόσβαση είτε μέσα στο ίδιο συγκρότημα είτε όποτε αναφέρονται.

Δομές

Οι δομές είναι οι λιγότερο κατανοητές από τις τρεις μορφές αντικειμένων. Αν μιλούσαμε για "ζώα" αντί για "αντικείμενα", η δομή θα ήταν μια Μυρμηγκοφάγο θηλαστικό.

Η μεγάλη διαφορά μεταξύ δομής και κλάσης είναι ότι μια δομή είναι α τύπος τιμής και μια κλάση είναι α τύπο αναφοράς.

Τι σημαίνει αυτό? Είμαι τόσο χαρούμενος που ρωτήσατε.

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

Μικρή ως Ακεραιότητα = 10

... και ελέγξατε τη θέση μνήμης που είναι αποθηκευμένη στη συσκευή myInt, θα βρείτε την τιμή 10. Βλέπετε επίσης αυτό που περιγράφεται ως "τοποθέτηση στη στοίβα".

Η στοίβα και ο σωρός είναι απλά διαφορετικοί τρόποι διαχείρισης της χρήσης της μνήμης του υπολογιστή.

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

Dim myString ως String = "Αυτό είναι το myString"

... και ελέγξατε τη θέση μνήμης που είναι αποθηκευμένη στη συσκευή myString, θα βρείτε μια άλλη θέση μνήμης (που ονομάζεται a δείκτης - αυτός ο τρόπος δράσης είναι η ίδια η καρδιά των γλωσσών στυλ C). Θα πρέπει να πάτε σε εκείνη την τοποθεσία για να βρείτε την τιμή "This is myString". Αυτό συχνά ονομάζεται "να διατεθεί στον σωρό". Η στοίβα και ο σωρός

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

Η προγραμματισμένη προέλευση των δομών επανέρχεται στις γλώσσες που προσανατολίζονται σε αρχεία, όπως το Cobol. Στις γλώσσες αυτές, τα δεδομένα συνήθως επεξεργάζονται ως διαδοχικά επίπεδα αρχεία. Τα "πεδία" σε μια εγγραφή από το αρχείο περιγράφηκαν από μια ενότητα "ορισμός δεδομένων" (μερικές φορές αποκαλείται "layout record" ή "copybook"). Έτσι, εάν ένα αρχείο από το αρχείο περιέχει:

1234567890ABCDEF9876

Ο μόνος τρόπος να γνωρίζετε ότι "1234567890" ήταν ένας αριθμός τηλεφώνου, "ABCDEF" ήταν ένα ID και 9876 ήταν 98,76 δολάρια ήταν μέσω του ορισμού των δεδομένων. Οι δομές σας βοηθούν να το ολοκληρώσετε στο VB.NET.

Δομή δομής1
Dim myPhone ως συμβολοσειρά
Dim myID ως συμβολοσειρά
Dim myAmount ως συμβολοσειρά
Δομή τελών

Γιατί α Σειρά είναι ένας τύπος αναφοράς, είναι απαραίτητο να διατηρηθεί το ίδιο μήκος με το VBFixedString χαρακτηριστικό για αρχεία σταθερού μήκους. Μπορείτε να βρείτε μια εκτεταμένη επεξήγηση αυτού του χαρακτηριστικού και των γενικών χαρακτηριστικών στο άρθρο Attributes in VB .NET.

Αν και οι δομές είναι μη τυπικά αντικείμενα, έχουν πολλές δυνατότητες στο VB.NET. Μπορείτε να κωδικοποιήσετε μεθόδους, ιδιότητες και ακόμη και συμβάντα και χειριστές συμβάντων σε δομές, αλλά μπορείτε επίσης να χρησιμοποιήσετε πιο απλουστευμένο κώδικα και επειδή είναι τύποι αξιών, η επεξεργασία μπορεί να είναι ταχύτερη. Για παράδειγμα, μπορείτε να επαναχαρακτήσετε τη δομή παραπάνω όπως αυτή:

Δομή δομής1
Dim myPhone ως συμβολοσειρά
Dim myID ως συμβολοσειρά
Dim myAmount ως συμβολοσειρά
Sub mySub ()
MsgBox ("Αυτή είναι η τιμή του myPhone:" & myPhone)
End Sub
Δομή τελών

Και χρησιμοποιήστε το ως εξής:

Dim myStruct ως δομή1
myStruct.myPhone = "7894560123"
myStruct.mySub ()

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