C# अकादमी · पाठ

Generic Classes

पुनः उपयोग योग्य Container Types।

पाठ 2, कुल 4 में से13 चरण

Generic Classes, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

जेनेरिक वर्ग क्या है?

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

इससे आप ऐसा एक कंटेनर या सेवा लिख सकते हैं जो कई तत्व-प्रकारों के साथ काम करे और फिर भी सशक्त प्रकार-सुरक्षा बनाए रखे।

class Box<T>
{
    public T Value { get; set; }
}

जेनेरिक वर्ग का निर्माण

इंस्टेंस बनाने के लिए आप एक ठोस प्रकार-तर्क देते हैं। Box<int> और Box<string> अलग-अलग निर्मित प्रकार हैं।

प्रत्येक निर्मित प्रकार ऐसे व्यवहार करता है मानो उसके T को हर स्थान पर वास्तविक प्रकार से बदल दिया गया हो।

using System;

class Box<T> { public T Value { get; set; } }

class Program
{
    static void Main()
    {
        var b = new Box<int> { Value = 7 };
        Console.WriteLine(b.Value);
    }
}

जेनेरिक फ़ील्ड और प्रॉपर्टी

प्रकार-पैरामीटर फ़ील्ड और प्रॉपर्टी के प्रकार के रूप में काम कर सकते हैं। स्टैक, कतार या कैश अक्सर अपने डेटा को T की सरणी या सूची में संग्रहीत करते हैं।

आंतरिक संग्रहण बिना किसी कास्ट के प्रकार-सुरक्षित रहता है।

class Pair<T>
{
    public T First;
    public T Second;
}

एकाधिक प्रकार-पैरामीटर

एक वर्ग कई प्रकार-पैरामीटर ले सकता है। कुंजी-मान पेयर या शब्दकोश-जैसा प्रकार आमतौर पर दो पैरामीटर का उपयोग करता है।

जब एक से अधिक पैरामीटर हों, तो TKey और TValue जैसे वर्णनात्मक नाम पढ़ने में आसानी बढ़ाते हैं।

class Entry<TKey, TValue>
{
    public TKey Key { get; set; }
    public TValue Value { get; set; }
}

एक सरल जेनेरिक स्टैक

यहाँ List<T> पर बनाया गया एक छोटा जेनेरिक स्टैक है। Push अंत में जोड़ता है और Pop अंत से हटाता है।

यही वर्ग पूर्णांकों, स्ट्रिंगों या किसी भी संदर्भ अथवा मान-प्रकार के लिए काम करता है।

using System;
using System.Collections.Generic;

class MyStack<T>
{
    private readonly List<T> items = new();
    public void Push(T item) => items.Add(item);
    public T Pop()
    {
        var i = items[^1];
        items.RemoveAt(items.Count - 1);
        return i;
    }
}

class Program
{
    static void Main()
    {
        var s = new MyStack<string>();
        s.Push("a");
        s.Push("b");
        Console.WriteLine(s.Pop());
    }
}

जेनेरिक वर्गों के अंदर जेनेरिक विधियाँ

एक जेनेरिक वर्ग अपनी अलग-अलग विधियों पर अतिरिक्त प्रकार-पैरामीटर भी घोषित कर सकता है। विधि-स्तर के ये पैरामीटर वर्ग-स्तर के पैरामीटरों से स्वतंत्र होते हैं।

इससे लचीलापन बढ़ता है, जैसे संग्रहीत प्रकार को किसी दूसरे प्रकार में बदलना।

class Box<T>
{
    public T Value;
    public TOut Map<TOut>(Func<T, TOut> f) => f(Value);
}

वर्ग पर प्रतिबंध

विधियों की तरह, एक जेनेरिक वर्ग भी अपने प्रकार-पैरामीटरों को where से सीमित कर सकता है। जो पैरामीटर जिस भी सदस्य में उपयोग होता है, उस पर प्रतिबंध लागू होता है।

नीचे, where T : class null असाइनमेंट और संदर्भ-तुलनाओं की अनुमति देता है।

class Repository<T> where T : class
{
    private T current;
    public bool IsEmpty => current is null;
}

स्थैतिक सदस्य प्रत्येक प्रकार के लिए अलग होते हैं

प्रत्येक निर्मित जेनेरिक प्रकार को किसी भी स्थैतिक फ़ील्ड की अपनी अलग प्रति मिलती है। Counter<int> और Counter<string> अलग-अलग गणनाएँ रखते हैं।

यह गैर-जेनेरिक वर्गों से एक सूक्ष्म, लेकिन महत्वपूर्ण अंतर है।

class Counter<T>
{
    public static int Count;
}

जेनेरिक वर्गों में डिफ़ॉल्ट मान

जेनेरिक वर्ग के अंदर आपको अक्सर T प्रकार के फ़ील्ड के लिए प्रारंभिक मान की आवश्यकता होती है। जब प्रकार संदर्भ से ज्ञात हो, तब default(T) या छोटा रूप default उपयोग करें।

यह संदर्भ-प्रकारों के लिए null और मान-प्रकारों के लिए शून्य मान देता है।

class Slot<T>
{
    public T Value = default!;
    public bool HasValue { get; private set; }
}

जेनेरिक वर्ग से विरासत लेना

आप किसी जेनेरिक आधार वर्ग से व्युत्पन्न हो सकते हैं। उपवर्ग प्रकार-तर्क को निश्चित कर सकता है या स्वयं भी जेनेरिक रह सकता है।

प्रकार-तर्क को निश्चित करने पर आधार वर्ग विशिष्ट बन जाता है; जेनेरिक रहने पर पैरामीटर आगे भेज दिया जाता है।

class Box<T> { public T Value; }

class IntBox : Box<int> { }

class NamedBox<T> : Box<T> { public string Name; }

जेनेरिक और अंतर्निहित संग्रह

.NET की आधार लाइब्रेरी जेनेरिक वर्गों से भरी है: List<T>, Dictionary<TKey, TValue> और Queue<T>। ये जेनेरिक वर्गों के डिज़ाइन का रोज़मर्रा में मिलने वाला लाभ हैं।

अपने जेनेरिक प्रकार लिखकर आप इसी सुरक्षित और पुनःप्रयोग योग्य शैली का विस्तार कर सकते हैं।

using System.Collections.Generic;

var scores = new Dictionary<string, int>();
scores["ada"] = 95;

त्वरित जाँच

जेनेरिक वर्गों की अपनी समझ जाँचें।

पुनरावलोकन

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

वे विधि-स्तर के प्रकार-पैरामीटर जोड़ सकते हैं, where प्रतिबंध रख सकते हैं, उनसे विरासत ली जा सकती है और वे प्रत्येक प्रकार की अलग स्थैतिक स्थिति रख सकते हैं। अंतर्निहित संग्रह इसका प्रमुख उदाहरण हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “Generic Classes” पाठ निःशुल्क है?

हाँ—“Generic Classes” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Generic Classes” में मैं क्या सीखूँगा?

पुनः उपयोग योग्य Container Types। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“Generic Classes” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Generic Methods
  2. Generic Classes
  3. where Constraints
  4. Generic Interfaces
← C# अकादमी पर वापस जाएँ