Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में फाइनलाइज़र्स (Finalizers / Destructors)


परिचय

फाइनलाइज़र (~ClassName()) ऑब्जेक्ट नष्ट होने से पहले अनमैनेज्ड संसाधन मुक्त करने के लिए उपयोग होता है। गारबेज कलेक्टर द्वारा स्वचालित रूप से कॉल किया जाता है।

नियम

  • एक क्लास में केवल एक फाइनलाइज़र।
  • इनहेरिट/ओवरलोड नहीं किया जा सकता।
  • कोई पैरामीटर/एक्सेस मोडिफायर नहीं।
  • नियतात्मक नहीं: कॉल समय अनिश्चित (GC पर निर्भर)।

सिंटैक्स

class Demo
{
    ~Demo()
    {
        // अनमैनेज्ड क्लीनअप
        Console.WriteLine("Finalizer called");
    }
}

पैटर्न: Dispose + Finalizer (SafeHandle अनुशंसित)

using System;

class ResourceHolder : IDisposable
{
    private IntPtr _handle; // अनमैनेज्ड संसाधन
    private bool _disposed;

    public ResourceHolder()
    {
        _handle = AllocateResource();
    }

    // पब्लिक Dispose
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // फाइनलाइज़र दबाएं
    }

    // प्रोटेक्टेड वर्चुअल
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // मैनेज्ड संसाधन मुक्त करें
            }
            // अनमैनेज्ड मुक्त करें
            FreeResource(_handle);
            _handle = IntPtr.Zero;
            _disposed = true;
        }
    }

    // फाइनलाइज़र (Dispose(false) कॉल करता है)
    ~ResourceHolder() => Dispose(false);
}

आधुनिक विकल्प

  • SafeHandle डेराइव्ड क्लास (SafeFileHandle, SafeRegistryHandle) - फाइनलाइज़र स्वचालित।
  • using स्टेटमेंट / IDisposable - नियतात्मक क्लीनअप।
  1. - C# में डायनामिक ऐरे क्या हैं

    डायनामिक ऐरे ग्रोएबल ऐरे हैं और स्टैटिक ऐरे पर लाभ रखते हैं। ऐसा इसलिए है क्योंकि ऐरे का साइज़ फिक्स्ड होता है। C# में ऐरे डायनामिकली बनाने के लिए, ArrayList कलेक्शन का उपयोग करें। यह एक ऑब्जेक्ट के ऑर्डर्ड कलेक्शन को दर्शाता है जिसे इंडिविजुअली इंडेक्स किया जा सकता है। यह डायनामिक मेमोरी आवंटन, लिस

  1. - C# में कॉन्टेक्स्चुअल कीवर्ड्स क्या हैं

    C# में, कुछ आइडेंटिफायर्स कोड के संदर्भ में विशेष अर्थ रखते हैं, जैसे get और set को कॉन्टेक्स्चुअल कीवर्ड्स कहा जाता है। निम्नलिखित टेबल कॉन्टेक्स्चुअल कीवर्ड्स दिखाती है - कॉन्टेक्स्चुअल कीवर्ड्स add alias ascending descending dynamic from get global group into join let orderby partial (ty

  1. - C# में कंडीशनल अट्रिब्यूट्स क्या हैं

    अट्रिब्यूट्स का उपयोग मेटाडेटा जोड़ने के लिए किया जाता है, जैसे कंपाइलर इंस्ट्रक्शन और अन्य जानकारी जैसे कमेंट्स, विवरण, मेथड्स, और क्लासेस को प्रोग्राम में। यह पूर्वनिर्धारित अट्रिब्यूट एक कंडीशनल मेथड को चिह्नित करता है जिसका एक्जीक्यूशन एक निर्दिष्ट प्रीप्रोसेसिंग आइडेंटिफायर पर निर्भर करता है। य