Structs

Η struct είναι μια δομή όπου μπορεί να περιέχει constructors, σταθερές, μεταβλητές, μεθόδους, ιδιότητες, indexers, events και εμφωλευμένους τύπους. Μια τυπική δήλωση struct μπορεί να έχει την παρακάτω μορφή

public struct myStruct
    {
        
    }

Παρατηρήσεις

Ο τύπος struct είναι κατάλληλος για να αντιπροσωπεύει ελεφρά αντικείμενα όπως Point, Rectangle και Color. Αν και είναι δυνατόν το αντικείμενο πχ Point να παρασταθεί με μια κλάση, η Struct είναι αποτελεσματικότερη σε μερικές περιπτώσεις. Για παράδειγμα, αν δηλώσεις έναν πίνακα με 1000 Point αντικείμενα, θα δεσμεύσεις επιπλέον μνήμη για να κάνεις αναφορά (reference) σε κάθε αντικείμενο. Σε αυτήν την περίπτωση, η struct είναι λιγότερο ακριβή.

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

Είναι λάθος να αρχικοποιήσει κανείς μια μεταβλητή μέσα στην struct.

Όταν κάποιος δημιουργεί ένα αντικείμενο struct χρησιμοποιώντας το new, δημιουργείται και ο κατάληλος constructor καλείται. Σε αντίθεση με τις κλάσεις, οι structs μπορούν να αρχικοποιηθούν και να αποκτήσουν υπόσταση χωρίς το new. Αν δεν χρησιμοποιήσετε το new, τα πεδία θα παραμείνουν ανεκχώρητα (χωρίς τιμή) και το αντικείμενο δεν θα μπορεί να χρησιμοποιηθεί μέχρι όλα τα πεδία να αρχικοποιηθούν.

Παράδειγμα 1

Στο παρακάτω παράδειγμα δείχνεται πως αρχικοποιείται μια struct με τον default και παραμετροποιημένο contructor

// Δήλωση και αρχικοποίηση
public struct Point 
{
   public int x, y;

   public Point(int p1, int p2) 
   {
      x = p1;
      y = p2;    
   }
}

class MainClass 
{
   public static void Main()  
   {
      // Initialize:   
      Point myPoint = new Point();
      Point yourPoint = new Point(10,10);

      // Προβολή αποτελεσμάτων:
      Console.Write("My Point:   ");
      Console.WriteLine("x = {0}, y = {1}", myPoint.x, myPoint.y);
      Console.Write("Your Point: ");
      Console.WriteLine("x = {0}, y = {1}", yourPoint.x, yourPoint.y);
   }
}

Έξοδος:
My Point: x = 0, y = 0 Your Point: x = 10, y = 10

Παράδειγμα 2

Αυτό το παράδειγμα δείχνει μια μοναδική λειτουργία για τις struct. Την δημιουργία αντικειμένου struct χωρίς το new. Αν αντικαταστήσετε το struct με class δεν θα γίνει compile.

public struct Point 
{
   public int x, y;

   public Point(int x, int y) 
   {
      this.x = x;
      this.y = y; 
   }
}

class MainClass 
{
   public static void Main() 
   {
      // Declare an object:
      Point myPoint;

      // Initialize:
      myPoint.x = 10;
      myPoint.y = 20;

      // Display results:
      Console.WriteLine("My Point:");
      Console.WriteLine("x = {0}, y = {1}", myPoint.x, myPoint.y);
   }
}