2009-02-26 18 views
17

क्या सी # में रनटाइम पर कक्षा सारांश प्राप्त करना संभव है? मैं प्रतिबिंब के माध्यम से कक्षा सारांश प्राप्त करना चाहता हूं और फिर इसे कंसोल पर लिखना चाहता हूं। वर्ग सारांश तक मैं कक्षा परिभाषा से पहले सारांश टिप्पणी, कुछ इस तरह मतलब है:रनटाइम पर कक्षा सारांश प्राप्त करना संभव है?

/// <summary> 
/// some description 
/// </summary> 
class SomeClass 
{ 
} 

मैं अगर इन टिप्पणियों कोड संकलन के बाद उपलब्ध हैं पता नहीं है, लेकिन अगर वे कर रहे हैं शायद वहाँ उन्हें प्राप्त करने के लिए एक रास्ता है कोड में।

सहायता के लिए अग्रिम धन्यवाद।

उत्तर

6

मैं एक बार एक समय पहले इस के साथ गड़बड़ है, और इस लोग समाधान का इस्तेमाल किया। काफ़ी अच्छा काम किया:

http://jimblackler.net/blog/?p=49

+0

यह मेरे लिए भी काम करता है। – empi

+2

अपने उत्तर को थोड़ा सा विस्तारित करने के लिए: यह समाधान वास्तव में जेनरेट किए गए एक्सएमएल दस्तावेज़ से वर्कअराउंड को वर्कअराउंड बनाता है। इस प्रकार यह आपके अपने कोड के साथ-साथ तीसरे पक्ष के libs (ओएसएस और वाणिज्यिक)। लेकिन कुछ ऐसे मामले हैं जहां आप एक्सएमएल दस्तावेज़ प्राप्त नहीं कर सकते हैं और यह आमतौर पर संभव नहीं है। – mbx

+1

कृपया अपने लिंक के सापेक्ष विवरण शामिल करें; अगर भविष्य में लिंक की मृत्यु हो गई तो यह दुर्भाग्यपूर्ण होगा, इस जवाब को बेकार - खासकर जब से यह स्वीकार्य उत्तर है। – Rob

1

यदि आप एक XML दस्तावेज़ फ़ाइल को छोड़ देते हैं, तो आप कर सकते हैं। इस प्रक्रिया में प्रकार के सभी सार्वजनिक सदस्यों को प्राप्त करने के लिए प्रतिबिंब का उपयोग करना शामिल होगा, फिर XPath का उपयोग करके, जेनरेट किए गए XML दस्तावेज़ से दस्तावेज़ पढ़ें।

अपडेट: अपने डीएलएल/एक्सई में एक्सएमएल दस्तावेज़ को शामिल करने के लिए, बस इसे एक एम्बेडेड संसाधन के रूप में जोड़ें, और दस्तावेज़ीकरण में बदलाव होने पर दो बार संकलित करें।

+0

+1। मैंने एक क्लोज किया जो एक्सएमएल पढ़ता है। यह भी अच्छा है कि यदि आप किसी सार्वजनिक विधि पर कोई टिप्पणी याद करते हैं, तो उसे चेतावनी दी जाती है ताकि आप इसे याद न करें। – Yogurtu

3

नहीं, वे प्रतिबिंब के माध्यम से उपलब्ध नहीं हैं। msdn देखें:

एक्सएमएल दस्तावेज़ टिप्पणियों मेटाडाटा नहीं हैं; वे संकलित असेंबली में शामिल नहीं हैं और इसलिए वे प्रतिबिंब के माध्यम से सुलभ नहीं हैं।

0

नहीं है, उन टिप्पणियों अपने संकलित विधानसभा में शामिल नहीं हैं।

विजुअल स्टूडियो आपके आउटपुट फ़ोल्डर (\ bin \ your_project.xml) में .xml फ़ाइल बना सकता है जिसमें वे टिप्पणियां हैं। यदि आपका एप्लिकेशन उस एक्सएमएल फ़ाइल के साथ वितरित किया गया था तो आप इसे प्रोग्रामिक रूप से एक्सेस कर पाएंगे।

3

आप रनटाइम पर उन तक नहीं पहुंच सकते हैं क्योंकि उन्हें संकलक द्वारा टिप्पणियां माना जाता है।

हालांकि, अगर आप जानकारी निर्दिष्ट करने के लिए एक विशेषता का उपयोग करना चाहते हैं और प्रतिबिंब के माध्यम से रनटाइम के दौरान इसे एक्सेस करना चाहते हैं तो आप ऐसा कर सकते हैं।

विशेषता निर्माण के लिए Creating Custom Attributes (C# Programming Guide) और रनटाइम एक्सेस के लिए Accessing Attributes With Reflection (C# Programming Guide) देखें। MSDN से

उदाहरण:

Author.cs:

public class Author : System.Attribute 
{ 
    private string name; 
    public double version; 

    public Author(string name) 
    { 
     this.name = name; 
     version = 1.0; 
    } 
} 

SampleClass.cs:

[Author("H. Ackerman", version = 1.1)] 
class SampleClass 
{ 
    // H. Ackerman's code goes here... 
} 
+0

यह एक समाधान है, लेकिन यदि आप इसका उपयोग करते हैं, तो आपको अपनी सहायता से दो बार लिखना होगा। विशेषता में एक और सारांश में, यदि आप इसे इंटेलिजेंस पर पढ़ना चाहते हैं। :( – Yogurtu

5

मैं CodePlex पर Jolt.NET परियोजना को बनाए रखने और एक विशेषता यह है कि यह बहुत ही कार्य करता है लागू किया है। अधिक जानकारी के लिए कृपया Jolt लाइब्रेरी देखें।

संक्षेप में, पुस्तकालय आपको System.Reflection (यानी 0) में मेटाडेटा प्रकारों का उपयोग करके एक असेंबली के लिए प्रोग्रामेटिक रूप से एक्सएमएल दस्तावेज़ टिप्पणियों को ढूंढने और क्वेरी करने की अनुमति देता है।MethodInfo, PropertyInfo, आदि ...)। इस समाधान के लिए

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