निम्नलिखित संकलन त्रुटि का कारण क्यों है?"कक्षा ए: IX" से सामान्य "टी कहां टी: IX" की अनुमति क्यों नहीं है?
interface IX {}
interface IY {}
class XY : IX, IY {}
void Foo<T>() where T : IX, IY
{
T xy = new XY();
… // ^^^^^^^^
} // error: "Implicit conversion of type 'XY' to 'T' is not possible."
नोट: यदि class XY : IX
और where T : IX
एक ही त्रुटि तब आ जाएगा। हालांकि, मैं एक अधिक जटिल उदाहरण को चुना है क्योंकि एक सरल एक तरह के रूप में, circumventive जवाब उकसाया हो सकता है, "बस IX
करने के लिए T
से xy
के प्रकार में परिवर्तन" जो का जवाब नहीं क्यों इस रूपांतरण विफल रहता है।
मैं बार बार तर्क में एक ही गलती को दोहरा रखना जब यह सामान्य प्रकार की कमी की बात आती है। आपके बहुत स्पष्ट स्पष्टीकरण के लिए धन्यवाद। – stakx
@stakx: मुझे संदेह है कि आप गलत दिशा में तर्क कर रहे हैं। बाधा का मतलब है * कोई भी टी दिए गए इंटरफ़ेस प्रकार * में कनवर्टिबल है, नहीं * इस इंटरफ़ेस को लागू करने वाला कुछ भी टी * में परिवर्तनीय है। –
@Eric, ठीक है! यदि आपको कोई फर्क नहीं पड़ता, तो क्या आप एक और संदेह की पुष्टि कर सकते हैं जो अभी मेरे लिए हुआ है? क्या भेद भी निम्नानुसार किया जा सकता है ... ** सही तर्क: ** 'टी' को 'फू' के कॉलर द्वारा चुना जाता है, न कि 'फू' द्वारा। यह 'टी' को सार्वभौमिक प्रकार बनाता है (कम से कम 'Foo' के लिए)। ** गलत तर्क ** (यानी मुझे, 3 घंटे पहले): 'टी 'को' फू 'द्वारा चुना जाता है, न कि उसके कॉलर द्वारा। यह इसे अस्तित्वहीन प्रकार बनाता है (कम से कम 'Foo' के कॉलर के लिए)। – stakx