2011-03-25 17 views

उत्तर

9

अन्य उत्तरों गलत हैं। इसके लिए कोई तकनीकी कारण नहीं है। प्रकार को कन्स्ट्रक्टर कॉल से अनुमानित किया जा सकता है क्योंकि यह "सामान्य" विधि कॉल से हो सकता है।

एरिक Lippert (पूर्व सी # संकलक डेवलपर) द्वारा जवाब का संदर्भ लें: Why can't the C# constructor infer type?

+0

ठीक है आप अच्छी तरह से देख रहे हैं। – Gleno

5

निम्नलिखित पर विचार करें: क्योंकि आप गैर सामान्य एक सामान्य है, और एक ही नाम के दो प्रकार घोषणा कर सकते हैं,

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? 

, आप स्पष्ट रूप से उन दोनों के बीच तय करने की जरूरत है कन्स्ट्रक्टर कॉल में। प्रकार पैरामीटर को स्पष्ट करने के लिए मजबूर करना किसी भी संभावित अस्पष्टता को हटाने का एक तरीका है। भाषा के लिए कुछ संकल्प नियम हो सकते हैं, लेकिन इस सुविधा के लाभ इसे लागू करने के लिए बजट खर्च करने के लिए पर्याप्त हैं।

+6

अच्छा उदाहरण। लेकिन क्या होगा यदि हमारे पास दो विधि अधिभार हैं: सामान्य और सामान्य नहीं? मुझे – SiberianGuy

+2

में एक बड़ा अंतर दिखाई नहीं देता है, वही एक जिसे बुलाया जाएगा यदि वे विधियां थे - गैर-सामान्य। – Jon

+2

जॉन सही है। इस बिंदु से एक कन्स्ट्रक्टर कॉल किसी भी अन्य विधि कॉल से कुछ और नहीं है और समान उल्लंघन नियम लागू किए जा सकते हैं। –

संबंधित मुद्दे