2011-04-06 19 views
10

सी #, में कैसे पता लगाया जा सकता है कि Type तत्काल हो सकता है या नहीं? मैं एक एक्टिवेटर से बचने की कोशिश कर रहा हूं। क्रिएट इंस्टेंस अपवाद।पता लगाएं कि टाइप तत्काल

मेरी वर्तमान विधि type.IsClass && !type.IsInterface है, लेकिन मुझे चिंता है कि यह अमूर्त कक्षाओं आदि में असफल हो सकता है। मैंने type.TypeInitializer == null की जांच भी की, लेकिन मुझे यकीन नहीं है कि यह मूर्खतापूर्ण है या नहीं।

Type तत्काल है तो यह पता लगाने के लिए सबसे आसान/सबसे प्रभावी तरीका क्या है?

+4

'type.IsAbstract' है। –

+1

इसे "सुरक्षित" होने के लिए उसे GetPonstructor() द्वारा वापस किए गए ConstructorInfo ऑब्जेक्ट पर IsPublic और समान गुणों को भी जांचना नहीं होगा। मुझे नहीं पता। मैं पूछ रहा हूं .. –

उत्तर

7

पर भी अन्य जांच कर सकते हैं। इसमें एक कन्स्ट्रक्टर हो सकता है जो निजी या संरक्षित है। या इसमें एक डिफ़ॉल्ट कन्स्ट्रक्टर नहीं हो सकता है, केवल रचनाकार जो कुछ तर्क प्रकार लेते हैं। यदि आपको इसके बारे में चिंता करने की ज़रूरत है तो आप निश्चित रूप से एक्टिवेटर का उपयोग कर रहे हैं। क्रिएट इंस्टेंस() जब इसका उपयोग नहीं किया जाना चाहिए। केवल मनमाने ढंग से वस्तुओं का निर्माण केवल विनाश बना सकता है, आपको पता नहीं है कि उनके पास किस प्रकार के दुष्प्रभाव हो सकते हैं। "FormatDisk" कक्षा से बचें।

आपका मित्र अपवाद है, यह आपको बताता है कि आपकी धारणाएं गलत थीं। कभी भी जानबूझकर .NET ढांचे को सहायक होने से रोकें।

+0

मैं एक इंटरफ़ेस के कार्यान्वयन के उदाहरण बना रहा हूं, इसलिए मुझे उनके बारे में कुछ पता है। हालांकि, मैं चेतावनी की सराहना करता हूं। – user664939

+0

बढ़िया है, तो आपको अपवादों के बारे में चिंता करने की ज़रूरत नहीं है या गलती से एक अमूर्त वर्ग बनाना नहीं चाहिए। एक साधारण जाने-माने नाम को नौकरी मिल जाती है। –

+0

मैं डिफ़ॉल्ट कन्स्ट्रक्टर की जांच के बारे में कैसे जाउंगा? – user664939

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