2010-04-14 17 views
6

कई सवाल करीब हैं की एक सूची प्राप्त करने के लिए, लेकिन कोई भी मेरी समस्या का जवाब देता ...उपयोग प्रतिबिंब स्थिर कक्षाओं

मैं सी # 3.5 में प्रतिबिंब का उपयोग कैसे करूँ सभी वर्गों जो एक विधानसभा से स्थिर हैं पाने के लिए। मुझे पहले से ही सभी प्रकार परिभाषित किए गए हैं, लेकिन कोई इस्टैटिक संपत्ति नहीं है। 0 रचनाकारों की गिनती वास्तव में धीमी है और या तो काम नहीं करती है।

कोई सुझाव या कोड की एक पंक्ति? :-)

क्रिस

उत्तर

12

यहां आपके द्वारा किसी विधानसभा से प्रकार मिलता है:

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

GetTypes Method

तब: कक्षाएं कि अमूर्त और एक ही समय में सील कर रहे हैं के लिए

देखो।

http://dotneteers.net/blogs/divedeeper/archive/2008/08/04/QueryingStaticClasses.aspx

ब्लॉग मैं जानकारी है कि .NET CLR स्थिर कक्षाओं के विचार पता नहीं है मिल सकता है में सर्च कर रहे हैं, फिर भी एक साथ सार और सील प्रकार झंडे का उपयोग कर की अनुमति देता है। इन झंडे का उपयोग सीएलआर द्वारा अपने व्यवहार को अनुकूलित करने के लिए भी किया जाता है, उदाहरण के लिए मुहरबंद ध्वज का उपयोग गैर-वर्चुअल जैसे सीलबंद वर्ग के कॉल वर्चुअल विधियों का उपयोग किया जाता है। तो, अगर एक प्रकार स्थिर है या नहीं पूछने के लिए, आप इस विधि का उपयोग कर सकते हैं:

नीचे टिप्पणी से:

IEnumerable<Type> types = typeof(Foo).Assembly.GetTypes().Where 
(t => t.IsClass && t.IsSealed && t.IsAbstract); 
+1

तो केविन की जवाब दिया, तुम इतनी तरह कक्षाएं प्राप्त कर सकते हैं: 'IEnumerable प्रकार = typeof (फू) .Assembly.GetTypes() .Where (टी => टी। आईएस क्लास && टी। आईएससील्ड और टी टीआईएसएब्स्ट्रैक्ट); ' –

1

स्टेटिक वर्गों सी #, नहीं आम भाषा विशिष्टता की एक विशेषता है, और इसलिए वहाँ एक प्रकार उदाहरण है कि संकेत मिलता है कि यह एक स्थिर वर्ग है पर मेटाडाटा का कोई एक टुकड़ा है। हालांकि, आप यह देखने के लिए जांच सकते हैं कि यह एक सीलबंद प्रकार है, और यदि इसके सभी गैर-विरासत वाले सदस्य स्थैतिक हैं।

3

क्या सी # एक स्थिर वर्ग कहता है, एक सार, सील वर्ग है सीएलआर के लिए। तो आपको IsAbstract & & IsSealed देखने की आवश्यकता होगी।

1

आपको निम्नलिखित चेक गठबंधन करने की आवश्यकता है: सार, मुहरबंद, पहले फ़ील्डइनिट। बाद स्थिर वर्ग को संकलित करता है आप संकलित विधानसभा में निम्नलिखित आईएल कोड देख सकते हैं:

.class public abstract auto ansi sealed beforefieldinit StaticClass 
    extends [mscorlib]System.Object 
{ 
} 
संबंधित मुद्दे