क्यों सी # अभियंता के लिए नहीं बल्कि विधियों के लिए जेनेरिक पैरामीटर का अनुमान लगाता है?सी # कन्स्ट्रक्टर जेनेरिक पैरामीटर अनुमान
new Tuple<int, int>(5, 5)
बनाम Tuple.Create(5, 5)
क्यों सी # अभियंता के लिए नहीं बल्कि विधियों के लिए जेनेरिक पैरामीटर का अनुमान लगाता है?सी # कन्स्ट्रक्टर जेनेरिक पैरामीटर अनुमान
new Tuple<int, int>(5, 5)
बनाम Tuple.Create(5, 5)
अन्य उत्तरों गलत हैं। इसके लिए कोई तकनीकी कारण नहीं है। प्रकार को कन्स्ट्रक्टर कॉल से अनुमानित किया जा सकता है क्योंकि यह "सामान्य" विधि कॉल से हो सकता है।
एरिक Lippert (पूर्व सी # संकलक डेवलपर) द्वारा जवाब का संदर्भ लें: Why can't the C# constructor infer type?
निम्नलिखित पर विचार करें: क्योंकि आप गैर सामान्य एक सामान्य है, और एक ही नाम के दो प्रकार घोषणा कर सकते हैं,
public class Foo<T>
{
public Foo(T value) { }
}
public class Foo
{
public Foo(int value) { }
}
// suppose type parameter inference in constructor calls
var x = new Foo(5); // which one?
, आप स्पष्ट रूप से उन दोनों के बीच तय करने की जरूरत है कन्स्ट्रक्टर कॉल में। प्रकार पैरामीटर को स्पष्ट करने के लिए मजबूर करना किसी भी संभावित अस्पष्टता को हटाने का एक तरीका है। भाषा के लिए कुछ संकल्प नियम हो सकते हैं, लेकिन इस सुविधा के लाभ इसे लागू करने के लिए बजट खर्च करने के लिए पर्याप्त हैं।
अच्छा उदाहरण। लेकिन क्या होगा यदि हमारे पास दो विधि अधिभार हैं: सामान्य और सामान्य नहीं? मुझे – SiberianGuy
में एक बड़ा अंतर दिखाई नहीं देता है, वही एक जिसे बुलाया जाएगा यदि वे विधियां थे - गैर-सामान्य। – Jon
जॉन सही है। इस बिंदु से एक कन्स्ट्रक्टर कॉल किसी भी अन्य विधि कॉल से कुछ और नहीं है और समान उल्लंघन नियम लागू किए जा सकते हैं। –
ठीक है आप अच्छी तरह से देख रहे हैं। – Gleno