Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τι εννοείται με το μοτίβο Dispose στον προγραμματισμό;

sobes.tech AI

Απάντηση από AI

Το μοτίβο Dispose στον προγραμματισμό, ειδικά στη C#, χρησιμοποιείται για την σωστή απελευθέρωση μη διαχειριζόμενων πόρων (π.χ. περιγραφείς αρχείων, συνδέσεις βάσεων δεδομένων, sockets) που δεν ελέγχονται από τον συλλέκτη απορριμμάτων.

Στη C#, για αυτό υλοποιείται η διεπαφή IDisposable, η οποία περιέχει τη μέθοδο Dispose(). Κάνοντας κλήση σε αυτήν τη μέθοδο, απελευθερώνονται ρητά οι πόροι όταν το αντικείμενο δεν χρειάζεται πλέον.

Παράδειγμα χρήσης:

class ResourceHolder : IDisposable
{
    private bool disposed = false;
    private IntPtr unmanagedResource; // παράδειγμα μη διαχειριζόμενου πόρου

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // αποτρέπει την κλήση του τελικού
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Απελευθέρωση διαχειριζόμενων πόρων
            }
            // Απελευθέρωση μη διαχειριζόμενων πόρων
            CloseHandle(unmanagedResource);
            unmanagedResource = IntPtr.Zero;
            disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}

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