ठीक है तो मैं एक जावा लड़का हूं जो सी # का उपयोग शुरू कर रहा है और मैं कोडिंग कर रहा था और एक सामान्य विधि बनाना शुरू कर दिया और मैंने जो लिखा और संकलित किया, लेकिन यह सब कुछ है जो मुझे पता है कि जेनेरिकों को कैसे काम करना चाहिए इसलिए मैं आशा करती हूं कि किसी ने मुझे यह समझाने कर सकते हैं:सी # टाइप करने के बिना सामान्य विधि
public static List<T> CopyAsList<T>(IEnumerable<T> list, Object lockObject)
{
if (list != null)
{
lock (lockObject)
{
return new List<T>(list);
}
}
return null;
}
लेकिन मुझे अजीब बात यह है कि मैं कभी भी निर्धारित किए बिना ही इस सामान्य विधि कॉल कर सकते हैं:
तो मैं एक सामान्य विधि इस प्रकार परिभाषित किया गया है T
और यह काम करेगा:
List<String> strings = new List<string>() { "a", "b", "c"};
List<int> ints = new List<int>() { 1,2,3};
object lockObject = new object();
foreach (string s in CopyAsList(strings, lockObject))
{
Console.WriteLine(s);
}
foreach (int i in CopyAsList(ints, lockObject))
{
Console.WriteLine(i);
}
यह कोड जेनेरिक प्रकार निर्दिष्ट किए बिना संकलित करने में सक्षम कैसे है? क्या सी # रनटाइम पर प्रकार का अनुमान लगाता है?
वहाँ कार्यावधि में अब और कोई सी # है। – Gabe
सी # कंपाइलर संकलन समय पर प्रकार का अनुमान लगाता है। एक तरफ ध्यान दें, सीएलआर (डीएलआर) रन टाइम पर प्रकार का अनुमान लगा सकता है, सी # से 'गतिशील' कीवर्ड देखें। – kizzx2
kizzx2: ओपी ने '.net-3.5' के साथ प्रश्न को टैग किया जो संदर्भ से 'गतिशील' को समाप्त करता है, और रनटाइम पर कोई प्रकार का संदर्भ नहीं होता है - डीएलआर प्रकार निर्धारित करने के लिए प्रतिबिंब का उपयोग करता है। – Gabe