2013-06-12 10 views
7

मैं सोच रहा था कि कस्टम अप्रचलित वर्ग बनाना संभव है या नहीं। मुझे इसकी ज़रूरत है और मुझे इस तथ्य से नफरत है कि अप्रचलित मेरे इनपुट से पहले इस चेतावनी को दिखाता है: कुछ अप्रचलित है:।सी # कस्टम अप्रचलित विशेषता

[CustomObsolete("Hello")] 
public int i = 0; 

देंगे चेतावनी/डिबग हैलो: मैं बस जब मैं सिर्फ अपने इनपुट के साथ क्षेत्र/विधि का उपयोग एक चेतावनी/त्रुटि देने के लिए, उदाहरण के लिए इतना चाहते हैं।

क्या यह संभव है? अगर मैं # चेतावनी/# त्रुटि का उपयोग करता हूं, तो यह हमेशा त्रुटि/चेतावनी दिखाएगा।

+0

जोन सही है, यहां तक ​​कि ... यदि आप चाहते हैं कि आप इसे देख सकते हैं http://www.dotnetperls.com/obsolete या http://www.codeproject.com/Articles/107103/Use - अप्रचलित-गुण-से-संकेत-अप्रचलित-मेथो – terrybozzio

+0

मैं इसे सोच रहा था क्योंकि मैं चाहता हूं कि एक कस्टम विशेषता जो इनपुट चाहता है उसे चेतावनी दे। लेकिन मुझे लगता है कि मैं बस अप्रचलित के साथ जाऊंगा। –

उत्तर

6

नहीं, ObsoleteAttribute प्रभावी रूप से सी # कंपाइलर में हार्ड-कोड किया गया है - सी # कंपाइलर यह समझने के लिए कोई तरीका नहीं है कि सी # कंपाइलर यह इंगित करेगा कि कोई सदस्य अप्रचलित है।

व्यक्तिगत रूप से मैं सिर्फ ObsoleteAttribute के साथ जाऊंगा - क्या यह वास्तव में है कि खराब है कि त्रुटि संदेश "एक्स अप्रचलित" के साथ शुरू होता है?

+0

मुझे यह वास्तव में पसंद नहीं है, लेकिन ऐसा लगता है कि कोई अन्य विकल्प नहीं है। –

0

आप प्राप्त करने के लिए क्या आप एक कस्टम post-build task होगा चाहते त्रुटि

[Obsolete("Hello", true)] 
    public String foo() { 
     return "bar"; 
    } 

के साथ और

[Obsolete("Hello", false)] 
    public String foo() { 
     return "bar"; 
    } 
+0

जिस तरह से मैंने इसे पढ़ा है, ओपी अप्रचलित एट्रिब्यूट से अवगत है लेकिन त्रुटि की सूचना के तरीके को पसंद नहीं है - आपके मामले में: "foo अप्रचलित है: 'हैलो' ' –

2

एक तरह से चेतावनी के साथ ही अप्रचलित

उपयोग कर सकते हैं। आपके प्रोजेक्ट को संकलित करने के बाद, आपके द्वारा बनाए गए एक और प्रोग्राम को इस असेंबली को लोड करें और इसे अपनी विशेषता के लिए पार्स करें। फिर आप उस संदेश को आउटपुट कर सकते हैं जो आप चाहते हैं और जो कुछ भी हो। लेकिन सटीक रेखा संख्या और फ़ाइल को आउटपुट करना जहां यह विशेषता उपयोग की जाती है, यह मुश्किल काम होगा, क्योंकि इसके लिए आपको पीडीबी फ़ाइल को पार्स करना होगा (और केवल डीबग मोड में ही काम करेगा)।

आपको बेहतर होना चाहिए कि Obsolete .NET की विशेषता है। :-)

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