C# में Generics: क्यों ज़रूरी हैं और कैसे उपयोग करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में Generics का परिचय



Generics (सामान्यीकृत प्रकार) C# भाषा की सबसे शक्तिशाली क्षमताओं में से एक है, जो .NET Framework 2.0 में दिखाई दी। ये आपको ऐसे क्लास, मेथड और इंटरफेस बनाने की अनुमति देते हैं जो किसी भी डेटा प्रकार के साथ काम करते हैं, साथ ही सख्त टाइपिंग बनाए रखते हैं। इस लेख में हम समझेंगे कि C# में generics की आवश्यकता क्यों है, उनका उपयोग कैसे करें और वे डेवलपर को क्या लाभ देते हैं।



कल्पना करें कि आपको दो वेरिएबल के मानों को आपस में बदलने के लिए एक मेथड लिखना है। Generics के बिना, आपको प्रत्येक प्रकार के लिए अलग-अलग मेथड बनाने होंगे: SwapInt, SwapString, SwapDouble इत्यादि। Generics के साथ यह कार्य एक सार्वभौमिक फंक्शन से हल हो जाता है।



Generics के मुख्य लाभ



1. कंपाइलेशन चरण पर प्रकार सुरक्षा



Generics कंपाइलेशन के दौरान प्रकारों की जाँच सुनिश्चित करते हैं, न कि रनटाइम के दौरान। इसका मतलब है कि प्रकार बेमेल से संबंधित त्रुटियाँ विकास के शुरुआती चरण में ही पकड़ी जाएँगी।



// Generics के बिना - रनटाइम पर त्रुटि संभवArrayList list = new ArrayList();list.Add(123);list.Add("स्ट्रिंग");int number = (int)list[1]; // InvalidCastException!

// Generics के साथ - कंपाइलेशन पर त्रुटिList<int> numbers = new List<int>();numbers.Add(123);numbers.Add("स्ट्रिंग"); // कंपाइलेशन त्रुटि!


2. प्रदर्शन



Generics का उपयोग मूल्य प्रकारों के लिए बॉक्सिंग (boxing) और अनबॉक्सिंग (unboxing) संचालन से बचाता है। यह कलेक्शन के साथ काम करते समय प्रदर्शन में काफी सुधार करता है।



// Boxing/Unboxing - धीमाArrayList list = new ArrayList();list.Add(42); // boxingint value = (int)list[0]; // unboxing

// Generics - तेज़, बिना boxing केList<int> list = new List<int>();list.Add(42); // बिना boxing केint value = list[0]; // बिना unboxing के


3. कोड का पुन: उपयोग



एक generic-क्लास या मेथड किसी भी डेटा प्रकार के साथ काम कर सकता है, जो कोड डुप्लिकेशन से बचाता है।



Generics का निर्माण और उपयोग



Generic क्लासेस



मानों की जोड़ी संग्रहीत करने के लिए सामान्यीकृत क्लास बनाने का उदाहरण देखें:



public class Pair<TFirst, TSecond>{    public TFirst First { get; set; }    public TSecond Second { get; set; }        public Pair(TFirst first, TSecond second)    {        First = first;        Second = second;    }        public void Display()    {        Console.WriteLine($"First: {First}, Second: {Second}");    }}

// उपयोगvar pair1 = new Pair<int, string>(1, "एक");var pair2 = new Pair<string, double>("PI", 3.14159);

pair1.Display(); // First: 1, Second: एकpair2.Display(); // First: PI, Second: 3.14159


Generic मेथड्स



मेथड भी सामान्यीकृत हो सकते हैं। यहाँ एक क्लासिक उदाहरण है — मानों को बदलने का मेथड:



public static void Swap<T>(ref T a, ref T b){    T temp = a;    a = b;    b = temp;}

// उपयोगint x = 5, y = 10;Swap<int>(ref x, ref y);Console.WriteLine($"x = {x}, y = {y}"); // x = 10, y = 5

string s1 = "Hello", s2 = "World";Swap(ref s1, ref s2); // प्रकार निर्दिष्ट नहीं कर सकतेConsole.WriteLine($"s1 = {s1}, s2 = {s2}"); // s1 = World, s2 = Hello


Generic इंटरफेसेस



Generics के साथ इंटरफेस लचीले अनुबंध बनाने की अनुमति देते हैं:



public interface IRepository<T>{    T GetById(int id);    void Add(T entity);    void Update(T entity);    void Delete(int id);}

public class UserRepository : IRepository<User>{ public User GetById(int id) { // उपयोगकर्ता प्राप्त करने का कार्यान्वयन return new User(); } public void Add(User user) { // जोड़ने का कार्यान्वयन } public void Update(User user) { // अद्यतन करने का कार्यान्वयन }

ब्लॉग

पुस्तक अनुशंसाएँ