2010-02-11 20 views
6

यदि किसी सदस्य को एकाधिक गुण लागू होते हैं, उदा।क्या गुणों के आदेश की कोई गारंटी है?

[Foo] 
[Bar] 
void Baz() { ... } 

तो CLR/नेट विनिर्देशों द्वारा किए गए किसी भी गारंटी के रूप में क्या क्रम में वे जब प्रतिबिंब द्वारा प्राप्त में पुनः प्राप्त किया जाएगा करने के लिए कर रहे हैं (जैसे Attribute.GetCustomAttributes)? इन विधियों के लिए प्रलेखन इसे स्पष्ट नहीं करता है, और ऐसा लगता है कि वे आदेश में लौट आए हैं, वे लागू नहीं हैं, मैं अनियंत्रित व्यवहार पर भरोसा नहीं करना चाहता क्योंकि यह केवल परेशानी के लिए पूछ रहा है।

क्यों यह महत्वपूर्ण हो सकता है, कल्पना करें कि गुणों का उपयोग यह इंगित करने के लिए किया जाता है कि विधि में इंटरसेप्टर की एक श्रृंखला होनी चाहिए, जिसे एक विशिष्ट क्रम में चलाना चाहिए।

उत्तर

11

17.2 Attribute specification से ऐसा नहीं लगता है।

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

+0

सुंदर निर्णायक लगता है - धन्यवाद। यही वह है जो मुझे ईमानदार होने की उम्मीद थी। –

3

इस तरह की चीज के लिए आदेश देने पर निर्भर करना आम तौर पर एक बुरा विचार है। यदि आदेश महत्वपूर्ण है, तो मैं विशेषता को प्राथमिकता संपत्ति प्रदान करूंगा ताकि इसे बहुत स्पष्ट बनाया जा सके।

मुझे किसी भी गारंटी की जानकारी नहीं है कि उन्हें मूल क्रम में पुनर्प्राप्त किया जाएगा।

+0

हाँ, मैं सहमत हूं। मैंने उन्हें इसे नियंत्रित करने के लिए 'AspectOrder' संपत्ति दी थी, लेकिन यह जानकर कि क्या इरादे के विपरीत आदेश की गारंटी देना आवश्यक था या नहीं। –

1

आईएमओ गुणों में ऑर्डर नहीं होना चाहिए क्योंकि वे प्रवाह नियंत्रण संरचना नहीं हैं।

मुझे लगता है कि आप विशेषता में प्राथमिकता संपत्ति जोड़ सकते हैं और रन ऑर्डर निर्धारित करने के लिए इसका उपयोग कर सकते हैं?

+1

गार - स्कीट द्वारा पीटा गया, मैं परेशान क्यों हूं? ;) – RSlaughter

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