2011-02-10 17 views
15
पर मान्य बनाने के लिए

संभव डुप्लिकेट:
Specify required base class for .NET attribute targetsनेट विशेषता केवल कुछ प्रकार

मैं निर्दिष्ट करने के लिए है कि मेरे कस्टम विशेषता केवल (कुछ प्रकार पर मान्य हो इंटरफेस के आधार पर चाहते हैं या बेस क्लास)।
इस तरह:

attributes

मैं ऐसा कैसे कर सकता है?

+0

अगर मैं गलत हूं तो मुझे सही करें: आप 'FooAttribute' रखना चाहते हैं, जब 'Fooable' से व्युत्पन्न किसी प्रकार के अलावा किसी अन्य चीज़ पर लागू होता है, तो संकलन विफल हो जाएगा (या कम से कम चेतावनी उत्पन्न होगी)। –

+0

@ एडम रॉबिन्सन: हाँ, अब मुझे लगता है कि सवाल एक डुप्लिकेट है, लेकिन वहां दिया गया जवाब मेरे लिए सही नहीं है -> मुझे यह निर्दिष्ट करना चाहिए था कि विशेषता और प्रतिबंधित बेस क्लास (या इंटरफ़ेस) अलग-अलग असेंबली में है, इसलिए एक नेस्टेड वर्ग के रूप में विशेषता को लागू करना व्यावहारिक नहीं है। – TDaver

+0

जो उत्तर आप बात कर रहे हैं उसे प्राप्त करने का एकमात्र माध्यम है। इसके अलावा, यह असंभव है। –

उत्तर

12

ऐसा लगता है कि आप एक Attribute जो केवल में कुछ प्रकार के लिए लागू किया जा सकता है बनाना चाहते हैं, AttributeUsage को Attribute से प्राप्त प्रकारों पर ही लागू किया जा सकता है। इस प्रकार के कस्टम प्रतिबंध का परिचय देना संभव नहीं है। आप जो विशेष त्रुटि देख रहे हैं वह एक कस्टम प्रतिबंध की वजह से नहीं है, यह वह है जो संकलक में स्वयं को मुश्किल से तारित करता है।

+0

दरअसल; परावर्तक में 'विशेषता' वर्ग खोलने से पता चलता है कि कक्षा पर ऐसा कोई तर्क नहीं है। –

+0

ठीक से पूछता है कि मैंने यहां पूछने से पहले क्या किया :) – TDaver

2

मुझे नहीं लगता कि आप कर सकते हैं, आप केवल यह निर्दिष्ट कर सकते हैं कि विशेषता किस प्रकार की भाषा तत्व मान्य है। AttributeUsageAttribute, एक विशेष मामला है क्योंकि संकलक इसके बारे में पता है और आपको लगता है कि एक विशेषता नहीं है कुछ पर इसे लागू नहीं करता है

+1

जब मैं सीएलआर चीट्स का उपयोग करता हूं तो मुझे इससे नफरत है। मैं वो करना चाहता हूँ। – TDaver

+0

@TDaver: यह सीएलआर नहीं है जो धोखा देती है, यह संकलक है। इसलिए, यदि आप अपना खुद का कंपाइलर लिखते हैं, तो आप इस कार्यक्षमता को जोड़ सकते हैं :) शायद सी # 5 के "एक सेवा के रूप में कंपाइलर" सुविधा के साथ यह आसान हो जाता है। –

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