5.5 Κατασκευαστές (Constructors) στη γλώσσα C#

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

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

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

Μπορεί να χρησιμοποιηθεί για να ορίσει αρχικές τιμές για τα πεδία:

using System;

class Person
{
    string name;
    int age;

    // Κατασκευαστής
    public Person(string personName, int personAge)
    {
        name = personName;
        age = personAge;
    }

    public void SayHello()
    {
        Console.WriteLine("Γεια σου! Το όνομά μου είναι " + name + " και είμαι " + age + " ετών.");
    }
}

class Program
{
    static void Main()
    {
        // Δημιουργία ενός αντικειμένου τύπου Person με το όνομα "Γιάννης" και ηλικία 25
        Person person = new Person("Γιάννης", 25);

        // Κλήση της μεθόδου SayHello() για το αντικείμενο person
        person.SayHello();
    }
}

Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα “Person” που αντιπροσωπεύει ένα άτομο. Η κλάση έχει δύο ιδιότητες: το όνομα του ατόμου (name) και την ηλικία του (age). Επίσης, η κλάση έχει έναν κατασκευαστή που δέχεται ως παραμέτρους το όνομα και την ηλικία του ατόμου και τις αντιστοιχεί στις ιδιότητες της κλάσης.

Η κλάση Person έχει επίσης μια μέθοδο με το όνομα “SayHello”, η οποία εκτυπώνει ένα μήνυμα που περιέχει το όνομα και την ηλικία του ατόμου.

Στη συνέχεια, υπάρχει μια κλάση με το όνομα “Program”, η οποία περιέχει την συνάρτηση “Main”. Στη συνάρτηση “Main”, δημιουργείται ένα αντικείμενο της κλάσης Person με το όνομα “Γιάννης” και ηλικία 25. Στη συνέχεια, καλείται η μέθοδος “SayHello” για το αντικείμενο προκειμένου να εκτυπωθεί το μήνυμα που αναφέρει το όνομα και την ηλικία του ατόμου.

Ο κώδικας, λοιπόν, δημιουργεί ένα αντικείμενο τύπου Person και εκτυπώνει το μήνυμα “Γεια σου! Το όνομά μου είναι Γιάννης και είμαι 25 ετών.”

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

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

Το παρακάτω παράδειγμα προσθέτει μια παράμετρο modelName τύπου string στον κατασκευαστή. Μέσα στον κατασκευαστή, ορίζουμε το πεδίο model ίσο με modelName (model = modelName). Όταν καλούμε τον κατασκευαστή, περνάμε μια παράμετρο στον κατασκευαστή (“Mustang”), η οποία θα ορίσει την τιμή του πεδίου model σε “Mustang”:

using System;

class Car
{
    string model;

    // Constructor με παράμετρο
    public Car(string modelName)
    {
        model = modelName;
    }

    public void ShowModel()
    {
        Console.WriteLine("Το μοντέλο του αυτοκινήτου είναι " + model);
    }
}

class Program
{
    static void Main()
    {
        // Δημιουργία ενός αντικειμένου της κλάσης Car με χρήση του constructor
        Car myCar = new Car("Mustang");

        // Κλήση της μεθόδου ShowModel για να εμφανιστεί το μοντέλο του αυτοκινήτου
        myCar.ShowModel();
    }
}

[adinserter block=”2″]

Ο παραπάνω κώδικας σε C# δημιουργεί μια απλή κλάση με όνομα “Car”. Η κλάση έχει ένα ιδιωτικό μέλος με όνομα “model” τύπου string, έναν δημόσιο constructor που δέχεται ένα παράμετρο “modelName” για την αρχικοποίηση του μέλους “model”, και μια δημόσια μέθοδο με όνομα “ShowModel” που εκτυπώνει το μοντέλο του αυτοκινήτου.

Στην κλάση “Program” υπάρχει η μέθοδος “Main”, η οποία είναι η εκκίνηση του προγράμματος. Μέσα στην “Main” δημιουργείται ένα αντικείμενο της κλάσης “Car” με τη χρήση του constructor και του δοθέντος ονόματος μοντέλου “Mustang”. Έπειτα, καλείται η μέθοδος “ShowModel” για το αντικείμενο “myCar”, προκειμένου να εκτυπωθεί το μοντέλο του αυτοκινήτου, το οποίο είναι “Mustang”.

Ουσιαστικά, ο κώδικας δημιουργεί ένα αντικείμενο τύπου “Car” και εμφανίζει το μοντέλο αυτοκινήτου που έχει οριστεί για αυτό το αντικείμενο.

Το αποτέλεσμα εκτέλεσης του παραπάνω κώδικα σε C# θα είναι η εκτύπωση της πρότασης:

Το μοντέλο του αυτοκινήτου είναι Mustang

Αυτό συμβαίνει επειδή δημιουργούμε ένα νέο αντικείμενο της κλάσης “Car” με το όνομα “Mustang” και καλούμε τη μέθοδο “ShowModel” για να εκτυπωθεί το μοντέλο του αυτοκινήτου που έχει οριστεί για αυτό το αντικείμενο.

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

Μπορείτε να έχετε όσες παραμέτρους θέλετε:

using System;

class Person
{
    string name;
    int age;

    // Κατασκευαστής της κλάσης Person
    public Person(string personName, int personAge)
    {
        name = personName;
        age = personAge;
    }

    // Μέθοδος που εκτυπώνει ένα μήνυμα υποδοχής
    public void SayHello()
    {
        Console.WriteLine("Γεια σου! Το όνομά μου είναι " + name + " και είμαι " + age + " ετών.");
    }
}

class Program
{
    static void Main()
    {
        // Δημιουργία ενός αντικειμένου τύπου Person με το όνομα "Γιάννης" και ηλικία 25
        Person person = new Person("Γιάννης", 25);
        person.SayHello(); // Κλήση της μεθόδου SayHello για το αντικείμενο person

        // Δημιουργία ενός αντικειμένου τύπου Person με το όνομα "Μαρία" και ηλικία 30
        Person anotherPerson = new Person("Μαρία", 30);
        anotherPerson.SayHello(); // Κλήση της μεθόδου SayHello για το αντικείμενο anotherPerson
    }
}

Ο παραπάνω κώδικας στη γλώσσα C# δημιουργεί μια κλάση με το όνομα “Person”. Η κλάση αυτή περιέχει δύο ιδιότητες (μεταβλητές) που αντιπροσωπεύουν το όνομα και την ηλικία ενός ατόμου.

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

Επίσης, η κλάση περιέχει μια μέθοδο με το όνομα “SayHello” που εκτυπώνει ένα μήνυμα υποδοχής, συνδυάζοντας το όνομα και την ηλικία του ατόμου.

Στην κλάση “Program” υπάρχει η μέθοδος “Main”, που είναι η κύρια μέθοδος του προγράμματος. Στο σώμα της μεθόδου “Main” δημιουργούνται δύο αντικείμενα τύπου “Person”, ένα με το όνομα “Γιάννης” και ηλικία 25 και ένα με το όνομα “Μαρία” και ηλικία 30. Στη συνέχεια, καλείται η μέθοδος “SayHello” για κάθε ένα από τα αντικείμενα, εκτυπώνοντας το μήνυμα υποδοχής για κάθε πρόσωπο.

Έτσι, ο κώδικας εκτυπώνει τα μηνύματα:

Γεια σου! Το όνομά μου είναι Γιάννης και είμαι 25 ετών.
Γεια σου! Το όνομά μου είναι Μαρία και είμαι 30 ετών.

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

Οι κατασκευαστές εξοικονομούν χρόνο

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

using System;

class Person
{
    string name; // Μεταβλητή για το όνομα του προσώπου
    int age; // Μεταβλητή για την ηλικία του προσώπου

    public Person(string personName, int personAge)
    {
        name = personName; // Ανάθεση του ονόματος από τον constructor
        age = personAge; // Ανάθεση της ηλικίας από τον constructor
    }

    public void SayHello()
    {
        Console.WriteLine("Γεια σου! Το όνομά μου είναι " + name + " και είμαι " + age + " ετών."); // Εκτύπωση μηνύματος που περιλαμβάνει το όνομα και την ηλικία του ατόμου
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person("Γιάννης", 25); // Δημιουργία ενός αντικειμένου Person με το όνομα "Γιάννης" και την ηλικία 25
        person.SayHello(); // Κλήση της μεθόδου SayHello για το αντικείμενο person

        Person anotherPerson = new Person("Μαρία", 30); // Δημιουργία ενός αντικειμένου Person με το όνομα "Μαρία" και την ηλικία 30
        anotherPerson.SayHello(); // Κλήση της μεθόδου SayHello για το αντικείμενο anotherPerson
    }
}

Στο παραπάνω παράδειγμα, ο κατασκευαστής της κλάσης Person δέχεται δύο παραμέτρους, personName και personAge, και αρχικοποιεί τα πεδία name και age. Με τη χρήση του κατασκευαστή, μπορούμε να δημιουργήσουμε αντικείμενα της κλάσης Person και να ορίσουμε τιμές για το όνομα και την ηλικία του ατόμου ταυτόχρονα. Αυτό μειώνει τον κώδικα που θα χρειαζόμασταν για να αρχικοποιήσουμε τα πεδία ξεχωριστά.

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

[adinserter block=”4″]

Χωρίς κατασκευαστή (Without constructor):

using System;

class Person
{
    string name; // Μεταβλητή για την αποθήκευση του ονόματος του ατόμου
    int age; // Μεταβλητή για την αποθήκευση της ηλικίας του ατόμου

    public void SetName(string personName)
    {
        name = personName; // Ορισμός του ονόματος του ατόμου
    }

    public void SetAge(int personAge)
    {
        age = personAge; // Ορισμός της ηλικίας του ατόμου
    }

    public void SayHello()
    {
        Console.WriteLine("Γεια σου! Το όνομά μου είναι " + name + " και είμαι " + age + " ετών."); // Εμφάνιση μηνύματος με το όνομα και την ηλικία του ατόμου
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person(); // Δημιουργία αντικειμένου Person
        person.SetName("Γιάννης"); // Ορισμός του ονόματος του ατόμου μέσω της μεθόδου SetName
        person.SetAge(25); // Ορισμός της ηλικίας του ατόμου μέσω της μεθόδου SetAge
        person.SayHello(); // Κλήση της μεθόδου SayHello για να εκτυπωθεί το μήνυμα χαιρετισμού
    }
}

Με κατασκευαστή (With constructor):

using System;

class Person
{
    string name; // Μεταβλητή για το όνομα του ατόμου
    int age; // Μεταβλητή για την ηλικία του ατόμου

    public Person(string personName, int personAge)
    {
        name = personName; // Ανάθεση τιμής στη μεταβλητή name με βάση το όρισμα personName
        age = personAge; // Ανάθεση τιμής στη μεταβλητή age με βάση το όρισμα personAge
    }

    public void SayHello()
    {
        Console.WriteLine("Γεια σου! Το όνομά μου είναι " + name + " και είμαι " + age + " ετών."); // Εκτύπωση μηνύματος με το όνομα και την ηλικία του ατόμου
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person("Γιάννης", 25); // Δημιουργία αντικειμένου της κλάσης Person με το όνομα "Γιάννης" και την ηλικία 25
        person.SayHello(); // Κλήση της μεθόδου SayHello για την εμφάνιση του μηνύματος χαιρετισμού
    }
}

Στο παράδειγμα “Χωρίς κατασκευαστή”, η κλάση Person δεν έχει κατασκευαστή. Αντί για αυτό, χρησιμοποιούμε τις μεθόδους SetName() και SetAge() για να ορίσουμε τις τιμές των πεδίων name και age αντίστοιχα, μετά τη δημιουργία του αντικειμένου. Στη συνέχεια, καλούμε τη μέθοδο SayHello() για να εμφανίσουμε το μήνυμα καλωσορίσματος.

Στο παράδειγμα “Με κατασκευαστή”, ορίζουμε έναν κατασκευαστή για την κλάση Person που δέχεται παραμέτρους personName και personAge. Οι τιμές αυτών των παραμέτρων χρησιμοποιούνται για την αρχικοποίηση των πεδίων name και age αντίστοιχα κατά τη δημιουργία του αντικειμένου. Έπειτα, καλούμε τη μέθοδο SayHello() για να εμφανίσουμε το μήνυμα καλωσορίσματος.

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

21 Αυγούστου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων