Generic Methods
Methods पर Type Parameters।
Generic Methods, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सामान्य विधियाँ क्या हैं?
सामान्य विधि अपने एक या अधिक प्रकार प्राचल घोषित करती है, जिन्हें विधि के नाम के बाद कोणीय कोष्ठकों में लिखा जाता है। इसके बाद वही विधि-खंड कई प्रकारों के साथ बिना कास्ट या दोहराव के काम करता है।
प्रकार प्राचल T जैसे स्थानधारक होते हैं। संकलक विधि के आह्वान स्थान पर वास्तविक प्रकार रख देता है, जिससे सभी प्रकार सुरक्षित बने रहते हैं।
void Print<T>(T value)
{
Console.WriteLine(value);
}प्रकार प्राचल घोषित करना
प्रकार प्राचलों की सूची <T> विधि के नाम और प्राचल सूची के बीच होती है। आप विधि-खंड के भीतर T का उपयोग प्राचल प्रकार, वापसी प्रकार या स्थानीय चर के प्रकार के रूप में कर सकते हैं।
परंपरा के अनुसार एकल प्रकार प्राचलों का नाम T रखा जाता है; TKey जैसे वर्णनात्मक नाम भी आम हैं।
T Echo<T>(T input)
{
return input;
}प्रकार-अनुमान के साथ कॉल करना
आप आमतौर पर प्रकार-तर्क को स्पष्ट रूप से निर्दिष्ट नहीं करते हैं। कंपाइलर आपके द्वारा दिए गए आर्ग्युमेंट से T का अनुमान लगा लेता है।
यहाँ Echo(42) से T = int और Echo("hi") से T = string का अनुमान लगता है। प्रकार-अनुमान जेनेरिक कॉल को स्वच्छ और पढ़ने योग्य बनाए रखता है।
using System;
class Program
{
static T Echo<T>(T input) => input;
static void Main()
{
Console.WriteLine(Echo(42));
Console.WriteLine(Echo("hi"));
}
}स्पष्ट प्रकार-तर्क
जब अनुमान प्रकार निर्धारित नहीं कर पाता, या जब आप इसे स्पष्ट रूप से बताना चाहते हैं, तब कॉल के स्थान पर कोणीय कोष्ठकों में प्रकार-तर्क दें।
जब कोई भी आर्ग्युमेंट प्रकार को वहन नहीं करता, तब यह आवश्यक होता है। उदाहरण के लिए, ऐसी विधि जिसमें T केवल लौटाए जाने वाले प्रकार में दिखाई देता है।
T Create<T>() where T : new() => new T();
// call:
var list = Create<int>();एकाधिक प्रकार-पैरामीटर
एक जेनेरिक विधि अल्पविराम से अलग किए गए कई प्रकार-पैरामीटर घोषित कर सकती है। प्रत्येक का अनुमान स्वतंत्र रूप से लगाया जाता है या उसे अलग से दिया जाता है।
इसका एक पारंपरिक उदाहरण स्वैप या पेयर बनाने वाली विधि है, जो दो अलग-अलग प्रकारों को मिलाती है।
(TSecond, TFirst) Flip<TFirst, TSecond>(TFirst a, TSecond b)
{
return (b, a);
}एक जेनेरिक स्वैप
ऐसी उपयोगिता-विधियों के लिए जेनेरिक विधियाँ बहुत उपयोगी होती हैं जो ठोस प्रकार की परवाह नहीं करतीं। स्वैप किसी भी समान प्रकार के दो मानों का क्रम बदल देता है।
ref कीवर्ड विधि को कॉल करने वाले के चरों को उसी स्थान पर बदलने देता है।
using System;
class Program
{
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 1, y = 2;
Swap(ref x, ref y);
Console.WriteLine($"{x} {y}");
}
}विधि-पैरामीटरों पर प्रतिबंध
एक जेनेरिक विधि अपने प्रकार-पैरामीटरों को where क्लॉज़ से सीमित कर सकती है। प्रतिबंध कंपाइलर को बताते हैं कि T पर कौन-से ऑपरेशन किए जा सकते हैं।
नीचे, where T : IComparable<T> विधि के अंदर CompareTo को सुरक्षित रूप से कॉल करने देता है।
T Max<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) >= 0 ? a : b;
}गैर-जेनेरिक वर्गों में जेनेरिक विधियाँ
जेनेरिक विधियाँ रखने के लिए किसी वर्ग का जेनेरिक होना आवश्यक नहीं है। स्थैतिक उपयोगिता-वर्गों में अक्सर ऐसी विधियाँ रखी जाती हैं।
इससे सामान्य-उद्देश्य वाली सहायक विधियाँ एक साथ व्यवस्थित रहती हैं और पूरे वर्ग पर प्रकार-पैरामीटर रखने की आवश्यकता नहीं पड़ती।
static class Util
{
public static T First<T>(T[] items) => items[0];
}सरणियों से अनुमान
प्रकार-अनुमान सरणी और संग्रह वाले आर्ग्युमेंट के माध्यम से भी काम करता है। int[] पास करने पर T = int का अनुमान अपने-आप लग जाता है।
इससे जेनेरिक एल्गोरिदम अंतर्निहित भाषा-सुविधाओं जैसे लगते हैं।
using System;
class Program
{
static T First<T>(T[] items) => items[0];
static void Main()
{
int[] nums = { 10, 20, 30 };
Console.WriteLine(First(nums));
}
}केवल object का उपयोग क्यों न करें?
जेनेरिक प्रकारों से पहले कोड में object और कास्ट का उपयोग किया जाता था। इससे प्रकार-सुरक्षा समाप्त हो जाती थी और मान-प्रकार बॉक्स हो जाते थे, जिससे प्रदर्शन प्रभावित होता था।
जेनेरिक विधियाँ मान-प्रकारों के लिए बॉक्सिंग से बचती हैं और प्रकार-संबंधी गलतियों को रनटाइम पर अपवाद आने के बजाय कंपाइल समय पर पकड़ लेती हैं।
// Unsafe: needs a cast and can fail at runtime
object Echo(object o) => o;
int n = (int)Echo(5);अलग-अलग प्रकार लौटाना
लौटाया जाने वाला प्रकार स्वयं जेनेरिक हो सकता है, जिससे एक विधि अपने आउटपुट को कॉल करने वाले के अनुसार ढाल सकती है। default(T) मान-प्रकारों के लिए शून्य मान या संदर्भ-प्रकारों के लिए null देता है।
जब कोई मान उपलब्ध न हो, तब सुरक्षित फ़ॉलबैक के लिए यह उपयोगी है।
T OrDefault<T>(bool ok, T value)
{
return ok ? value : default(T);
}त्वरित जाँच
जेनेरिक विधियों की अपनी समझ जाँचें।
पुनरावलोकन
जेनेरिक विधियाँ अपने प्रकार-पैरामीटर नाम के बाद कोणीय कोष्ठकों में घोषित करती हैं। कंपाइलर आमतौर पर आर्ग्युमेंट से प्रकार का अनुमान लगा लेता है, लेकिन आप इसे स्पष्ट रूप से भी दे सकते हैं।
वे प्रकार-सुरक्षा बनाए रखती हैं, बॉक्सिंग से बचती हैं और where प्रतिबंध रख सकती हैं। आप उन्हें किसी भी वर्ग में रख सकते हैं, चाहे वह जेनेरिक हो या नहीं।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “Generic Methods” पाठ निःशुल्क है?
हाँ—“Generic Methods” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Generic Methods” में मैं क्या सीखूँगा?
Methods पर Type Parameters। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Generic Methods” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Generic Methods
- Generic Classes
- where Constraints
- Generic Interfaces