एक कारण यह हो सकता है: क्योंकि यह एक क्षेत्र है
class Foo<out T>
{
T _store;
public T Get()
{
_store = default(T);
return _store;
}
}
इस वर्ग, एक विशेषता यह है कि covariant नहीं है शामिल है, और क्षेत्रों मूल्यों के लिए सेट किया जा सकता। हालांकि यह एक कॉन्वर्सेंट तरीके से उपयोग किया जाता है, क्योंकि इसे केवल डिफ़ॉल्ट मान दिया जाता है और यह किसी भी मामले के लिए केवल null
होने वाला है जहां कॉन्वर्सिस वास्तव में उपयोग किया जाता है।
जैसा कि यह स्पष्ट नहीं है कि हम इसे अनुमति दे सकते हैं। यह उपयोगकर्ताओं को परेशान नहीं करेगा (यह आपके द्वारा सुझाए गए समान संभावित नियमों से मेल खाता है), लेकिन यह मुश्किल है (विश्लेषण पहले से ही थोड़ा मुश्किल हो गया है और हम यह भी नहीं कर रहे हैं कि वास्तव में मुश्किल मामलों की तलाश भी शुरू हो)।
दूसरी ओर, इस बात का विश्लेषण बहुत सरल है:
void Main()
{
IFoo<object> foo = new Foo<string>();
Console.WriteLine(foo.Get());
}
interface IFoo<out T>
{
T Get();
}
class Foo<T> : IFoo<T>
{
T _store;
public T Get()
{
_store = default(T);
return _store;
}
}
यह IFoo<T>
टूटता सहप्रसरण के कार्यान्वयन की कि कोई भी निर्धारित करने के लिए आसान है, क्योंकि यह किसी भी नहीं मिला है। यह आवश्यक है कि यह सुनिश्चित करना है कि T
का पैरामीटर (एक सेटर विधि सहित) का कोई उपयोग नहीं है और यह हो गया है।
तथ्य यह है कि संभावित प्रतिबंध एक बहुत अधिक इसी तरह के कारणों के लिए एक इंटरफेस पर की तुलना में एक वर्ग पर कठिन है, यह भी डिग्री कम कर देता है जो करने के लिए covariant कक्षाएं उपयोगी होगा। वे निश्चित रूप से बेकार नहीं होंगे, लेकिन यह कितना उपयोगी होगा कि नियमों को निर्दिष्ट करने और उन्हें लागू करने के लिए कितना काम करना होगा, इसके बारे में नियमों को लागू करने के लिए कितना उपयोगी होगा, यह कितना उपयोगी कॉन्वर्स इंटरफेस है यह निर्दिष्ट करने के लिए कि उन्हें निर्दिष्ट और कार्यान्वित करना कितना काम था।
निश्चित रूप से, अंतर के लिए पर्याप्त है कि यह की बात अतीत है "अच्छी तरह से, आप अनुमति देने के लिए एक्स जा रहे हैं यह मूर्खतापूर्ण करने के लिए Y की अनुमति नहीं ... होगा"।
स्रोत
2015-03-20 16:52:59
यह सीएलआर सीमा के कारण है। अब यदि आप अपना प्रश्न संशोधित करते हैं तो यह अच्छा होगा ताकि कोई जवाब दे सके कि इस पर सीएलआर सीमा क्यों है। – Stilgar
@Stilgar: क्या आप जवाब नहीं दे सकते "अंतर्निहित सीएलआर कार्यान्वयन में इस बात के कारण यह समर्थित नहीं है"? – Chris
कक्षाओं को कार्यान्वयन के विवरणों के बारे में चिंता करने की आवश्यकता है - प्रतिनिधियों और इंटरफेस नहीं करते हैं।यह काम करना बहुत काम होगा। यह पूछते हुए कि सी # टीम ने इस काम को क्यों नहीं किया, थोड़ा सा व्यर्थ लगता है - उन्होंने नहीं किया, यह समर्थित नहीं है, कहानी का अंत है। –