C#: Should a nested class in a generic class be considered generic? -


  नाम स्थान जेनरिक्स टेस्ट {सार्वजनिक वर्ग AGenericClass & lt; T & gt; {सार्वजनिक वर्ग नेस्टेड नॉनजेंनेरिक क्लास {}}}  

ऊपर दिए गए उदाहरण में, नेस्टेड नॉनजेंनेरिक क्लास को एक सामान्य वर्ग माना जाना चाहिए?

प्रतिबिंब एपीआई कहते हैं यह एक सामान्य वर्ग है, और मुझे नेस्टेड क्लास के टेम्पलेट पैरामीटर के रूप में युक्त वर्ग के टेम्पलेट पैरामीटर भी रखता है।

  प्रकार nestedClass = typeof (AGenericClass & lt; int & gt; .NestedNonGenericClass); Console.Out.WriteLine ("IsGeneric: {0} \ tHasGenericArguments: {1}", नेस्टेड क्लास। आईज़जेनरिक टाइप, नेस्टेड क्लास। GetGenericArguments ()। लंबाई; 0);  

यह प्रिंट करता है:

इस्जनेरिक: ट्रू हैजेनरिक ऍग्रीगमेंट्स: ट्रू

मैं इसके साथ पूरी तरह सहमत नहीं हूं व्यवहार। भले ही कंपाइलर NestedNonGenericClass के लिए एक सामान्य प्रकार उत्पन्न करता है, मुझे यह जानना है कि यह सामान्य है क्योंकि इसे घोषित किया गया है, या क्योंकि कंटेनर सामान्य है।

इसलिए, मेरा सवाल है:

सबसे पहले, क्या आपको लगता है कि नेस्टेड क्लास जेनेरिक पर विचार करना ठीक है क्योंकि कंटेनर सामान्य था? क्यों / क्यों नहीं?

दूसरे, क्या आपको कुछ अन्य एपीआई जानना पड़ता है जो मुझे केवल उन वर्गों की पहचान करने में मदद कर सकता है जिन्हें सामान्य घोषित किया गया था?

पीएस: मैं संबंधित जेनेरिक के लिए ईसीएमए चश्मा में (या शायद मैं इसे खत्म कर दिया है)।

- संपादित करें

थोड़ा और संदर्भ जोड़ने के लिए, मैं एक पर काम कर रहा हूँ कोड जनरेटर के प्रकार और मैं प्रतिबिंब एपीआई का उपयोग कर रहा हूं यह निर्धारित करने के लिए कि एक प्रकार सामान्य है या नहीं।

मैं एक कोड में शब्दकोश & lt; TKey, TValuue & gt; .KeyCollection

P> कुंजीकलन के लिए, रिफ्लेक्शन एपीआई का कहना है कि यह सामान्य है और मुझे TKey और TValue से अधिक कंटेनर में घोषित किया गया है इसलिए, जनरेटर को डिक्शनरी & lt; TKey, TValue & gt; केईकॉल्यूशन & lt; Tkey, TValue & gt;

बनाने का एकमात्र तरीका मैं नेस्टेड क्लास टेम्पलेट कंटेनर के खिलाफ मापदंडों और उन सभी को समाप्त कर देते हैं जो मैच करते हैं। लेकिन मैं सोच रहा था कि क्या कोई बेहतर तरीका है।

संक्षेप में, हाँ - एक प्रकार टाइप बहस यह किसी भी प्रकार से होता है: यह सूची & lt; T & gt; जैसे कुछ चीजों की चाबी है .अनुमीटर और कई अन्य परिदृश्य आदि - यह महत्वपूर्ण है कि वे T से साझा करते हैं बाहरी कक्षा (न सिर्फ किसी भी T )।

ECMA रेफरी है §25.1:

किसी भी वर्ग को जेनेरिक क्लास घोषणा के अंदर नेस्टेड किया गया है या एक सामान्य संरचना घोषणापत्र (§25.2) ही एक सामान्य वर्ग घोषणा है, क्योंकि प्रकार के लिए प्रकार पैरामीटर एक निर्माण प्रकार बनाने के लिए आपूर्ति की जाएगी।


Comments