लोड हो रहा है...

जेनरिक्स

जेनरिक्स (Generics) C# में एक शक्तिशाली फीचर है जो डेवलपर्स को ऐसा कोड लिखने की अनुमति देता है जो विभिन्न डेटा प्रकारों के साथ काम कर सकता है, बिना रनटाइम पर टाइप सुरक्षा खोए। जेनरिक्स का उपयोग करने से कोड पुन: प्रयोज्य, सुरक्षित और मेंटेन करने योग्य बनता है। यह विशेष रूप से कलेक्शन जैसे List, Dictionary\ और जेनरिक एल्गोरिदम विकसित करने में उपयोगी होता है।
C# में जेनरिक्स का उपयोग तब किया जाता है जब आपको एक ही लॉजिक को विभिन्न डेटा प्रकारों के लिए लागू करना हो। इससे कोड डुप्लीकेशन कम होता है और टाइप कास्टिंग की आवश्यकता घटती है। जेनरिक्स के साथ, डेवलपर OOP सिद्धांतों, डेटा स्ट्रक्चर्स और एल्गोरिदम को अधिक कुशलता से लागू कर सकता है।
इस ट्यूटोरियल में, पाठक सीखेंगे कि कैसे जेनरिक क्लासेस और मेथड्स बनाई जाती हैं, टाइप कॉन्स्ट्रेंट्स लागू किए जाते हैं और जेनरिक्स का उपयोग वास्तविक C# प्रोजेक्ट्स में कैसे किया जा सकता है। साथ ही, यह समझाया जाएगा कि जेनरिक्स सॉफ़्टवेयर आर्किटेक्चर में कैसे मॉड्यूलरिटी और परफॉर्मेंस बढ़ाते हैं।

मूल उदाहरण

text
TEXT Code
using System;

namespace GenericsDemo
{
// जेनरिक क्लास की परिभाषा
public class Box<T>
{
private T content;

public void Add(T item)
{
content = item;
}

public T Get()
{
return content;
}
}

class Program
{
static void Main(string[] args)
{
// int प्रकार के लिए जेनरिक क्लास
Box<int> intBox = new Box<int>();
intBox.Add(42);
Console.WriteLine("Box में सामग्री: " + intBox.Get());

// string प्रकार के लिए जेनरिक क्लास
Box<string> stringBox = new Box<string>();
stringBox.Add("नमस्ते दुनिया");
Console.WriteLine("Box में सामग्री: " + stringBox.Get());
}
}

}

इस उदाहरण में Box नामक एक जेनरिक क्लास बनाई गई है, जहाँ T एक टाइप पैरामीटर है। यह क्लास विभिन्न डेटा प्रकारों के लिए एक ही लॉजिक लागू कर सकती है। Add और Get मेथड्स कंटेंट को जोड़ने और प्राप्त करने के लिए उपयोग की जाती हैं। Main में Box और Box को इनस्टैंस किया गया है, जिससे दिखाया गया है कि जेनरिक क्लास अलग-अलग टाइप्स के साथ काम कर सकती है।
यह कोड टाइप सुरक्षा सुनिश्चित करता है क्योंकि कंपाइलर यह जांचता है कि केवल निर्दिष्ट टाइप का उपयोग किया जाए। जेनरिक्स का यह उपयोग कोड पुन: प्रयोज्यता बढ़ाता है, कास्टिंग की आवश्यकता कम करता है और रनटाइम एरर्स से बचाता है।

व्यावहारिक उदाहरण

text
TEXT Code
using System;
using System.Collections.Generic;

namespace AdvancedGenericsDemo
{
// जेनरिक रिपॉज़िटरी क्लास टाइप कॉन्स्ट्रेंट के साथ
public class Repository<T> where T : class
{
private List<T> items = new List<T>();

public void Add(T item)
{
if (item == null)
throw new ArgumentNullException(nameof(item), "Item null नहीं हो सकता");
items.Add(item);
}

public T Find(Predicate<T> predicate)
{
return items.Find(predicate);
}

public void DisplayAll()
{
foreach (var item in items)
{
Console.WriteLine(item.ToString());
}
}
}

class Product
{
public string Name { get; set; }
public decimal Price { get; set; }

public override string ToString()
{
return $"{Name} - {Price} ₹";
}
}

class Program
{
static void Main(string[] args)
{
Repository<Product> productRepo = new Repository<Product>();
productRepo.Add(new Product { Name = "Laptop", Price = 70000 });
productRepo.Add(new Product { Name = "Smartphone", Price = 40000 });

Console.WriteLine("सभी उत्पाद:");
productRepo.DisplayAll();

Product expensiveProduct = productRepo.Find(p => p.Price > 50000);
Console.WriteLine("सबसे महंगा उत्पाद: " + expensiveProduct);
}
}

}

इस उदाहरण में Repository नामक जेनरिक क्लास बनाई गई है जिसमें टाइप कॉन्स्ट्रेंट where T : class है, जो केवल रेफरेंस टाइप्स को अनुमति देता है। Add, Find और DisplayAll मेथड्स डेटा को सुरक्षित और कुशलता से हैंडल करती हैं। Null चेकिंग के साथ एरर हैंडलिंग की गई है।
Product क्लास एक वास्तविक ऑब्जेक्ट को दर्शाती है और ToString ओवरराइड कर उपयोग को सरल बनाती है। Main में Repository का उपयोग करके उत्पाद जोड़ना, दिखाना और कीमत के अनुसार खोज करना दिखाया गया है। यह उदाहरण जेनरिक्स, OOP, एल्गोरिदम और exception handling का मिश्रण है और C# में Best Practices का पालन करता है।

C# में जेनरिक्स के लिए Best Practices और सामान्य गलतियाँ:

  • टाइप कॉन्स्ट्रेंट्स का उपयोग करके सही टाइप्स की अनुमति दें।
  • जेनरिक कंटेनर्स में unmanaged resources स्टोर करने से बचें।
  • इनबिल्ट जेनरिक कलेक्शन्स (List, Dictionary\) का उपयोग करें।
  • Null या invalid इनपुट के लिए exception handling करें।
  • जेनरिक्स को अनावश्यक रूप से सामान्य न बनाएं।
  • Debugging के दौरान actual types पर ध्यान दें।
  • Performance बढ़ाने के लिए Boxing/Unboxing को कम करें।
  • Security के लिए इनपुट वैलिडेशन करें और संवेदनशील डेटा सुरक्षित रखें।

📊 संदर्भ तालिका

C# Element/Concept Description Usage Example
जेनरिक क्लास क्लास जो कई प्रकारों को संभाल सकती है public class Box<T> { T content; }
जेनरिक मेथड मेथड जो विभिन्न प्रकारों के लिए काम करती है public T GetItem<T>(T item) { return item; }
Constraints क्लास पर टाइप सीमाएँ लागू करना where T : class, new()
List<T> जेनरिक लिस्ट कलेक्शन List<int> numbers = new List<int>();
Dictionary\<TKey,TValue> की-वैल्यु कलेक्शन Dictionary\<string,int> ages = new Dictionary\<string,int>();
Predicate<T> एलीमेंट सर्च या फिल्टरिंग के लिए delegate items.Find(p => p.Price > 50000);

सारांश और अगले कदम:
जेनरिक्स C# में कोड को सुरक्षित, पुन: प्रयोज्य और performant बनाने का तरीका है। जेनरिक क्लासेस, मेथड्स, कलेक्शन्स और constraints का सही उपयोग करके जटिल डेटा प्रोसेसिंग और एल्गोरिदम को implement किया जा सकता है। यह modular और maintainable architecture को बढ़ावा देता है और runtime errors को कम करता है।
आगे सीखने के लिए Stack, Queue, LINQ के साथ Generics, IEnumerable और IComparable interfaces का उपयोग, और Design Patterns के साथ Generics का संयोजन फायदेमंद है। यह प्रैक्टिकल अप्रोच से code quality, performance और security में सुधार करता है।

🧠 अपने ज्ञान की परीक्षा करें

शुरू करने के लिए तैयार

अपना ज्ञान परखें

व्यावहारिक प्रश्नों के साथ इस विषय की अपनी समझ का परीक्षण करें।

4
प्रश्न
🎯
70%
पास करने के लिए
♾️
समय
🔄
प्रयास

📝 निर्देश

  • हर प्रश्न को ध्यान से पढ़ें
  • हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
  • आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
  • आपकी प्रगति शीर्ष पर दिखाई जाएगी