2012-01-19 8 views
7

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

उत्तर

4

ही अपनी विशेषता वर्ग को परिभाषित एक AttributeUsageAttribute विशेषता जहां Inherited संपत्ति true है।

या नहीं, के बाद से है कि डिफ़ॉल्ट है ...

व्युत्पन्न लक्ष्य (जो है, कक्षाओं यदि विशेषता एक वर्ग पर है, तरीकों अगर यह एक विधि, आदि पर है) तो प्राप्त कर लेंगे स्पष्ट घोषणा के बिना विशेषता।

+0

कमाल! धन्यवाद। – irisjay

2

यदि "बल" से, आपका मतलब है "संकलन समय प्रवर्तन": आप नहीं कर सकते।

1

जैसा कि डैनियल ने कहा था, आप संकलन समय पर विशेषताओं को लागू नहीं कर सकते हैं।

लेकिन यदि आप रनटाइम पर डेटा पढ़ना चाहते हैं, तो विशेषताओं और प्रतिबिंबों के साथ परेशान क्यों हैं? आप अपने अमूर्त वर्ग में एक अमूर्त विधि बना सकते हैं:

abstract class Base 
{ 
    public abstract string Metadata(); 
} 

class Derived1 : Base 
{ 
    public override string Metadata() 
    { 
     return "Metadata for Derived1"; 
    } 
} 

class Derived2 : Base // won't compile, since Metadata has not been provided 
{ 
} 

व्यवहार थोड़ा अलग है। इस विकल्प के साथ, आपको केवल प्रकार की जानकारी के बजाय व्युत्पन्न वर्ग के इंस्टेंस के संदर्भ की आवश्यकता है। दूसरी तरफ, यह प्रतिबिंब से बचाता है।

+0

हालांकि, समस्या यह है कि मैं किसी भी वर्ग के उदाहरणों के बिना असेंबली से मेटाडेटा लाने के लिए चाहता हूं। मैं उसे कैसे कर सकता हूँ? – irisjay

+0

@testgo: मुझे डर है, मेरा सुझाव दिया गया कामकाज तब आपके लिए उपयोगी नहीं है। – Heinzi

1

जैसा कि डैनियल कहता है कि आप संकलन समय पर मजबूर नहीं हो सकते हैं। आप अमूर्त माता-पिता को विशेषता जोड़ सकते हैं और उन्हें उठा सकते हैं।

एक और विकल्प मूल वर्ग में विशेषता के अस्तित्व की जांच करने के लिए एक विधि जोड़ने और उपस्थित होने पर अपवाद फेंकना है। उचित तरीकों से कॉल करें।

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