मैं अब सी # एपीआई को वही रखने में सक्षम होना चाहता हूं जैसा कि अभी है, लेकिन बस एक विधि कॉल में पैरामीटर में से एक को हटा दें। क्या ऐसा करना संभव है, या क्या मुझे पैरामीटर के बिना एक नई विधि बनाने की आवश्यकता है और मूल को अप्रचलित के रूप में चिह्नित करना है?मैं विशिष्ट पैरामीटर को सी # में अप्रचलित/बहिष्कृत के रूप में कैसे चिह्नित कर सकता हूं?
उत्तर
लघु जवाब:
आप नए हस्ताक्षर के साथ एक नया nethod बनाते हैं, और अप्रचलित के रूप में वर्तमान चिह्नित करने के लिए की आवश्यकता होगी।
लंबे समय तक जवाब
क्या आप सभी कीमत पर से बचना चाहते हैं एक कोड तोड़ने है! फिर, विशेष रूप से एक कंपनी ढांचे में, आप विज्ञापन देना चाहते हैं कि आपकी विधि अब समर्थित नहीं होगी, उदाहरण के लिए, लेकिन आप आर्किटेक्चर या डिज़ाइन निर्णय या आपकी तरफ से दुर्घटना के समाधान के आधार पर ज़िम्मेदार नहीं बनना चाहते हैं, है ना?
ObsoleteAttribute
कक्षा आपके लिए चाल करेगी।
एक बार वर्ग के सदस्य को अप्रचलित के रूप में चिह्नित करने के बाद, क्लाइंट-साइड पर एक चेतावनी उठाई जाएगी, जो आपके ढांचे का उपयोग करते हैं, इस तरह जारी रखने के लिए, या एक ही प्रोजेक्ट के तहत आपके एक सहयोगी को भी।
public class MyClass {
[Obsolete("This method should no longer be used, please use MyNewMethod() instead.")]
public void MyMethod(string name, long phoneNumber, long faxNumber) {
}
public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) {
}
}
यह MyMethod
अब अपने कोड उपयोगकर्ताओं भर समर्थित है कि विज्ञापन करेंगे।
एक निश्चित अवधि के बाद, हर किसी को अपना कोड बदलने की अनुमति देने के लिए पर्याप्त उचित है, तो आप इस विशेषता को एक त्रुटि संदेश फेंकने के लिए कह सकते हैं जब आपकी अप्रचलित विधि अभी भी कोड में उपयोग की जाती है।
public class MyClass {
[Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)]
public void MyMethod(string name, long phoneNumber, long faxNumber) {
}
public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) {
}
}
true
से पीछे नहीं ObsoleteAttribute
वर्ग निर्माता पैरामीटर सेट करके, आप टेलीफोन संकलक एक त्रुटि के रूप में इस पद्धति के उपयोग को विज्ञापित करने के।
कुछ समय के बाद, आप इसे थोड़ा सा साफ करने के लिए अपने कोड से पूरी तरह से अपनी विधि को हटा सकते हैं। यह Agile सॉफ्टवेयर विकास पद्धति द्वारा प्रोत्साहित रिफैक्टरिंग विधियों का हिस्सा है।
क्या इससे मदद मिलती है?
हां। आप केवल mark types and members of types as obsolete, व्यक्तिगत पैरामीटर नहीं कर सकते हैं। हालांकि, आप विधि ओवरलोड सकती है, जिससे एक ही नाम रखने और पुराने एक के रूप में अप्रचलित निशान:
class Act
{
[Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)]
public void DoSomething(int i, int j)
{
}
public void DoSomething(int i)
{
}
}
मुझे लगता है कि यह एक नई विधि बनाने के लिए सबसे अच्छा होगा।
पैरामीटर अप्रचलित बनाकर आपका क्या मतलब है? क्या यह उस तर्क के लिए एक विशिष्ट मूल्य पर निर्भर करता है? जब आप कोई विधि कॉल करते हैं, तो आपको हमेशा तर्क निर्दिष्ट करना होगा।
हां, मुझे लगता है कि पैरामीटर के बिना एक नई विधि बनाना और मूल को ObsoleteAttribute
के साथ चिह्नित करना एकमात्र तरीका है।
+1 बिल्कुल! =) –
:
[Obsolete("Please use void AnotherMethod() instead", false)]
void SomeMethod(Int32 data){
}
विशेषता में बूलियन संकलक बताता है, एक चेतावनी उत्पन्न करने के लिए यदि आप इसे सही करने के लिए बदल संकलक एक त्रुटि उत्पन्न होगा। इस पर प्रलेखन के लिए here देखें।
+1 यह जाने का सबसे अच्छा तरीका है! =) –
क्या पूरी विधि को अप्रचलित के रूप में चिह्नित किए बिना ऐसा करना संभव है? – Brian
नहीं, अन्य उत्तरों (जैसे कि क्रिस वालिस) राज्य के रूप में, पैरामीटर अप्रचलित एट्रिब्यूट के लिए एक लक्ष्य नहीं है। अधिक प्रतिस्पर्धी उत्तर और चरणों को वर्तनी के लिए –
- 1. मैं पर्ल कोड को बहिष्कृत के रूप में कैसे चिह्नित कर सकता हूं?
- 2. क्या मैं एक जीआईटी रिमोट को केवल पढ़ने के रूप में चिह्नित कर सकता हूं?
- 3. क्या मैं एनोटेशन का उपयोग करके प्ले में POST के रूप में नियंत्रक विधि को चिह्नित कर सकता हूं?
- 4. मैं अपने परम को jquery ऑब्जेक्ट के रूप में चिह्नित करने के लिए jsdoc कैसे प्राप्त कर सकता हूं?
- 5. मैं जेस्पर रिपोर्ट को पैरामीटर के रूप में एक मनमानी वस्तु कैसे पारित कर सकता हूं?
- 6. मैं तैयार कथन में बाध्य पैरामीटर के रूप में MySQL फ़ंक्शन कैसे पास कर सकता हूं?
- 7. मैं एक्शन में पैरामीटर कैसे पास कर सकता हूं?
- 8. मैं सी # में एसक्यूएल फ़ंक्शन कैसे कॉल कर सकता हूं?
- 9. मैं किसी विधि के पैरामीटर के रूप में कक्षा की संपत्ति कैसे पास कर सकता हूं?
- 10. मैं इस फ़ंक्शन में पैरामीटर कैसे पास कर सकता हूं?
- 11. मैं एक सरणी फ़ंक्शन के पैरामीटर के रूप में सरणी कैसे पास कर सकता हूं?
- 12. मैं एक विशिष्ट फ़ोल्डर को कैसे अनजिप कर सकता हूं?
- 13. पर्सफोर्स में आकस्मिक रूप से "हटाने के लिए चिह्नित" फाइलें। मैं इसे कैसे उलट सकता हूं?
- 14. क्या मैं एक माईबेटिस मैपर में पैरामीटर के रूप में एक सूची पास कर सकता हूं?
- 15. यदि यह डाटाबेस है तो मैं फ़ॉर्म/फ़ील्ड को "गंदे" के रूप में कैसे चिह्नित कर सकता हूं?
- 16. मैं डेल्फी में बहिष्कृत संपत्ति को कैसे चिह्नित कर सकता हूं?
- 17. मैं केकपीएचपी में एक विशिष्ट संख्या में खोज को कैसे सीमित कर सकता हूं?
- 18. क्या मैं System.Net.Mail का उपयोग कर Outlook के लिए "उच्च महत्व" के रूप में एक ईमेल चिह्नित कर सकता हूं?
- 19. मैं सी # में पैरा 'आउट` कैसे कर सकता हूं?
- 20. स्प्रिंग एमवीसी - विधि पैरामीटर के रूप में अनुरोध पैरामीटर को मैप पैरामीटर के रूप में मैप नहीं कर सकता?
- 21. मैं सी # में वेक्टर प्रकार कैसे प्राप्त कर सकता हूं?
- 22. मैं sql_mode के विशिष्ट मान को कैसे देख सकता हूं?
- 23. मैं htaccess का उपयोग कर विशिष्ट फ़ोल्डरों में auto_prepend को कैसे अक्षम कर सकता हूं?
- 24. मैं सी # में ब्लूटूथ कैसे शामिल कर सकता हूं?
- 25. क्या मैं स्कैला में बहिष्कृत फ़ंक्शन को चिह्नित कर सकता हूं?
- 26. मैं PHP में समय के 33% कोड को यादृच्छिक रूप से कैसे निष्पादित कर सकता हूं?
- 27. मैं आगे की प्रक्रिया के लिए चिह्नित पाठ को कैसे पार्स कर सकता हूं?
- 28. मैं विशिष्ट फ़ाइलों को आउटपुट में कॉपी करने के लिए चींटी कैसे सेट कर सकता हूं?
- 29. रेल में विशिष्ट कार्रवाइयों के लिए प्रामाणिकता टोकन को मैं कैसे अनदेखा कर सकता हूं?
- 30. मैं डेटाबेस में किसी विशिष्ट तालिका के संयोजन को कैसे प्राप्त कर सकता हूं?
+1। स्टीव उत्तर से अधिक जानकारीपूर्ण – Gorgen