सिस्टम परिभाषित इंटरफेस का उपयोग करना सीखें

Complete

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

विधियों में उपयोग किए जाने वाले सामान्य इंटरफेस

कई सामान्य इंटरफेस अक्सर .NET ढांचे के भीतर सी # विधियों में उपयोग किए जाते हैं। ये इंटरफेस विभिन्न वर्गों द्वारा कार्यान्वित मानक कार्यक्षमता प्रदान करते हैं।

  • IComparable: वस्तुओं की तुलना करने के लिए उपयोग किया जाता है।
  • IEnumerable: संग्रह पर पुनरावृत्ति के लिए उपयोग किया जाता है।
  • IDisposable: अप्रबंधित संसाधनों को रिलीज़ करने के लिए उपयोग किया जाता है.
  • IEquatable: समानता तुलना को परिभाषित करने के लिए उपयोग किया जाता है।

सिस्टम परिभाषित इंटरफेस लागू करें

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

.NET में सिस्टम-निर्धारित इंटरफ़ेस अक्सर किसी भी प्रकार का प्रतिनिधित्व करने के लिए प्लेसहोल्डर T का उपयोग करते हैं। उदाहरण के लिए, IEquatable इंटरफ़ेस .NET ढाँचा में निम्नानुसार निर्धारित किया गया है:

public interface IEquatable
{
    bool Equals(T other);
}

जब आप इस इंटरफ़ेस को किसी कक्षा में कार्यान्वित करते हैं, तो आप कक्षा के प्रकार से प्रतिस्थापित T करते हैं।

उदाहरण के लिए, निम्न Car वर्ग इंटरफ़ेस लागू करता है IEquatable :

public class Car : IEquatable
{
    public string Make { get; set; }
    public string Model { get; set; }

    public bool Equals(Car other)
    {
        if (other == null) return false;
        return this.Make == other.Make && this.Model == other.Model;
    }
}

इस उदाहरण में, Car में प्रतिस्थापित करता TIEquatable है, इसे बना रहा हैIEquatable। वर्ग विधि का Car अपना कार्यान्वयन प्रदान करता हैEquals, जो जांचता है कि वर्तमान Make ऑब्जेक्ट के Model गुण ऑब्जेक्ट Car के गुणों otherCar के बराबर हैं या नहीं।

एक वर्ग के गुण और इंडेक्सर्स एक इंटरफ़ेस में परिभाषित संपत्ति या इंडेक्सर के लिए अतिरिक्त एक्सेसर्स को परिभाषित कर सकते हैं। उदाहरण के लिए, एक इंटरफ़ेस एक संपत्ति घोषित कर सकता है जिसमें एक get एक्सेसर है। इंटरफ़ेस को लागू करने वाला वर्ग एक ही संपत्ति को ए get और set एक्सेसर दोनों के साथ घोषित कर सकता है। यहाँ एक उदाहरण है:

public interface IExampleInterface
{
    string Name { get; }
}

public class ExampleClass : IExampleInterface
{
    public string Name { get; set; }
}

इस उदाहरण में, IExampleInterface एक Name एक्सेसर के साथ एक संपत्ति get घोषित करता है। ExampleClass इंटरफ़ेस को लागू करता है और ए get और set एक्सेसर दोनों के साथ एक ही संपत्ति की घोषणा करता है।

सामान्य प्रणाली परिभाषित इंटरफेस का उपयोग

सामान्य सिस्टम-निर्धारित इंटरफ़ेस जैसे IEnumerable, IDisposable, और IComparable अक्सर .NET अनुप्रयोगों में उपयोग किए जाते हैं। ये इंटरफेस मानक तरीके प्रदान करते हैं जिन्हें विभिन्न प्रकारों में लगातार व्यवहार सुनिश्चित करने के लिए लागू किया जा सकता है।

आईई गणनीय

इंटरफ़ेस का IEnumerable उपयोग एक संग्रह को परिभाषित करने के लिए किया जाता है जिसे एन्यूमरेट किया जा सकता है। इसमें एक एकल विधि है, GetEnumeratorजो एक गणनाकार लौटाती है जो संग्रह के माध्यम से पुनरावृत्त होती है।

public class MyCollection : IEnumerable
{
    private int[] _items = { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < _items.Length; i++)
        {
            yield return _items[i];
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

IDisposable

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

public class ResourceHolder : IDisposable
{
    private bool _disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // Prevents the garbage collector from calling the finalizer if Dispose has already been called.
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // Free managed resources
            }
            // Free unmanaged resources
            _disposed = true;
        }
    }

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

IComparable

इंटरफ़ेस का उपयोग कक्षा के IComparable उदाहरणों की तुलना करने के लिए एक विधि को परिभाषित करने के लिए किया जाता है। इसमें एक एकल विधि है, CompareToजो वर्तमान उदाहरण की तुलना उसी प्रकार की किसी अन्य वस्तु से करती है।

public class Person : IComparable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        if (other == null) return 1; // If 'other' is null, this instance is considered greater
        return this.Age.CompareTo(other.Age); // Returns negative value if  precedes 'other', 0 if same position, or postive value if follows 'other'.
    }
}

इस उदाहरण में, यदि शून्य है, तो other हम 1 लौटाते हैं, यह दर्शाता है कि वर्तमान उदाहरण को शून्य संदर्भ से बड़ा माना जाता है।

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