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

Πώς να εργαστείτε με δομές στο C #

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

Όταν μια παρουσία μιας δομής μεταβιβάζεται σε μια μέθοδο, περνά πάντα από την τιμή. Αυτό έρχεται σε αντίθεση με αυτό που συμβαίνει όταν μεταδίδουμε μια παρουσία μιας κλάσης σε μια μέθοδο - η παρουσία μεταδίδεται με αναφορά.

Δομές προγραμματισμού σε C #

Δείτε πώς φαίνεται η σύνταξη για τη δήλωση μιας δομής.

δομ

{

// Μέλη δεδομένων και συναρτήσεις μελών της δομής

}

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μοιάζει ένας τυπικός ορισμός δομής.

ορθογώνιο

    {

δημόσιο πλάτος int?

δημόσιο ύψος int?

    }

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

Ορθογώνιο ορθογώνιο = νέο ορθογώνιο ();

ορθογώνιο. εύρος = 10;

ορθογώνιο. ύψος = 15;

Το παραπάνω απόσπασμα κώδικα δημιουργεί μια παρουσία του ορθογωνίου δομή και εκχωρεί τιμές στα δημόσια μέλη του. Λάβετε υπόψη ότι μπορείτε να έχετε δεδομένα και μεθόδους μέλους σε μια δομή. Επίσης, μπορείτε να ορίσετε τα μέλη ως ιδιωτικά, δημόσια και εσωτερικά. Θα πρέπει να σημειωθεί ότι σε αντίθεση με τις τάξεις, δεν μπορείτε να έχετε αρχικοποιητές πεδίων για μη στατικά πεδία σε δομές. Ως εκ τούτου, δηλώσεις όπως οι ακόλουθες σε δομή δεν είναι έγκυρες.

int πλάτος = 10;

int ύψος = 15;

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

στατική περιοχή int = 0;

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

ορθογώνιο

    {

int πλάτος?

int ύψος?

δημόσιο ορθογώνιο (int πλάτος, int ύψος)

        {

this.width = πλάτος;

this.height = ύψος;

        }

δημόσια int GetArea ()

        {

επιστρέψτε αυτό. εύρος * αυτό. ύψος;

        }

    }

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

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

        {

Ορθογώνιο ορθογώνιο = νέο ορθογώνιο (10, 15);

int area = ορθογώνιο.GetArea ();

Console.WriteLine ("Η περιοχή είναι:" + area.ToString ());

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

        }

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

διεπαφή IRectangle

    {

int GetArea ();

    }

δομή ορθογώνιο: ορθογώνιο

    {

int πλάτος?

int ύψος?

δημόσιο ορθογώνιο (int πλάτος, int ύψος)

        {

this.width = πλάτος;

this.height = ύψος;

        }

δημόσια int GetArea ()

        {

επιστρέψτε αυτό. εύρος * αυτό. ύψος;

        }

    }

Επιλογή μεταξύ τάξης και δομής

Τώρα φτάνουμε σε ένα ενδιαφέρον σημείο συζήτησης. Πότε πρέπει να χρησιμοποιήσουμε μια δομή πάνω σε μια τάξη και αντίστροφα;

Όπως συζητήσαμε νωρίτερα σε αυτό το άρθρο, δημιουργείται μια παρουσία μιας δομής στη στοίβα, ενώ μια παρουσία μιας κλάσης δημιουργείται στο σωρό που διαχειρίζεται. Η κατανομή και η εκκαθάριση των τύπων τιμών είναι φθηνότερα από τους τύπους αναφοράς. Μια δομή είναι μια καλή επιλογή όταν πρέπει να δημιουργήσετε έναν σύνθετο τύπο δεδομένων που θα περιέχει μερικά μέλη δεδομένων. Στην ιδανική περίπτωση, το μέγεθος των μελών δεδομένων μιας δομής θα πρέπει να είναι μικρότερο από 16 byte. Μπορείτε να επιλέξετε μια δομή όταν θέλετε να δημιουργήσετε μια μικρή σύνθετη δομή δεδομένων που έχει σημασιολογική αξία και περιέχει μόνο λίγα μέλη δεδομένων. Όταν χρησιμοποιείτε δομή σε τέτοιες περιπτώσεις, μπορείτε να αποφύγετε τα γενικά έξοδα που σχετίζονται με τη συλλογή απορριμμάτων.

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