जिज्ञासा से बाहर, क्यों संकलक टाइपिंग (ऑब्जेक्ट) से अलग किसी भी अलग तरह से एक अनियंत्रित जेनेरिक प्रकार का इलाज करता है?जेनेरिक और प्रकार की बाधाओं के नियम
class Bar { }
class Foo
{
void foo(object thing)
{
((Bar)thing).ToString();
}
}
class Foo<T>
{
void foo(T thing)
{
((Bar)thing).ToString();
}
}
उपर्युक्त में, बार में "टी चीज" कास्टिंग एक संकलक त्रुटि में परिणाम देता है। बार में "ऑब्जेक्ट चीज" कास्टिंग करना हालांकि कुछ ऐसा है जो संकलक मुझे अपने जोखिम पर ही करने देता है।
जो मैं नहीं देखता वह क्यों है। .NET ऑब्जेक्ट में सभी के बाद कैच-सब है और रन-टाइम प्रकार बॉक्स किए गए मान या किसी भी प्रकार का ऑब्जेक्ट हो सकता है। तो मुझे नहीं लगता कि कंपाइलर के लिए दो मामलों के बीच अंतर करने के लिए तर्कसंगत कारण क्या है। सबसे अच्छा मैं ऐसा कर सकता हूं जैसे "प्रोग्रामर संकलक से जेनेरिक प्रकारों के साथ टाइपिंग करने की अपेक्षा करेगा, लेकिन ऑब्जेक्ट के साथ नहीं।" :) क्या यही सबकुछ है इसमें है?
Btw, मैं बस
((Bar)(object)thing).ToString();
लिख कर पता है कि मैं अभी भी अपने कलाकारों, फू मामले में किया प्राप्त कर सकते हैं कर रहा हूँ मैं सिर्फ समझने के लिए क्यों संकलक करता चाहते हैं ...
क्या यह आपके लिए 'int' 'बार' डालने के लिए समय कानूनी है? जब आप 'int' के साथ उस प्रकार पैरामीटर को भरते हैं, तो क्या * * * कंपाइलर त्रुटियों को शुरू करना चाहिए? क्या होगा अगर असेंबली तुम्हारा नहीं है, तो आप समस्या नहीं देख सकते हैं? टी वस्तु नहीं है। यह कुछ अविश्वसनीय रूप से विशिष्ट है। –
क्या आप यह भी जानते हैं कि आप 'कक्षा Foo कह सकते हैं जहां टी: बार' से _ensure_ कि' टी' हमेशा 'बार' पर डाला जा सकता है? –
Rawling
मुझे यकीन है कि एरिक लिपर्ट के पास इस बारे में एक ब्लॉग पोस्ट है, लेकिन मुझे यह नहीं मिल रहा है ... –