2011-01-05 16 views
6

कारण मैं पूछता हूं, यह केवल विधि पैरामीटर घोषणा में मान्य है, है ना? मैं "पैरा" नामक फ़ंक्शन बॉडी के अंदर एक चर बनाने की कोशिश कर रहा था, लेकिन निश्चित रूप से यह एक बड़ा सौदा नहीं है, बस सोच रहा है कि एमएस ने इसे वैश्विक कीवर्ड बनाने के लिए चुना है और प्रासंगिक नहीं है।पैराम्स कीवर्ड प्रासंगिक क्यों नहीं है?

+3

क्यों भाग पर यकीन नहीं है, लेकिन यदि आप वास्तव में इसे # # में एक परिवर्तनीय नाम के रूप में उपयोग करना चाहते हैं तो वैरिएबल नाम @: int @params = 1 के साथ; – Derrick

उत्तर

5

tvanoffson का जवाब अनुमान है कि प्रासंगिक "पैरा" बनाना मुश्किल होगा। यह वास्तव में मुश्किल नहीं होगा। विचार करें:

void M(params x) 

हम इस मामले में क्या करेंगे, hypothetically, एक प्रकार 'पैरा' खोजने का पहला प्रयास है। अगर हम एक पा सकते हैं, तो, हम कर चुके हैं। अगर हम नहीं कर सके, तो हमें कुछ समस्या है। एक्स के बजाय उदाहरण के लिए उदाहरण के लिए यह

void M(params Int32) 

स्पष्ट रूप से यह एक त्रुटि है, लेकिन क्या त्रुटि है? क्या हमें लगता है कि Int32 पैरामीटर नाम है और त्रुटि "आप प्रकार गुम हैं" दे? क्या हमें लगता है कि Int32 प्रकार है और यह कहने में त्रुटि है कि प्रकार को सरणी प्रकार होना चाहिए, और आप पहचानकर्ता को याद कर रहे हैं? क्या हमें यह कहते हुए एक त्रुटि देनी चाहिए कि 'पैरा' नामक कोई प्रकार नहीं है? यहाँ करने के लिए सही बात क्या है? स्पष्ट रूप से हम कुछ समझ सकते हैं लेकिन स्पष्ट नहीं है।

यह उन त्रुटि मामलों में है जो संदर्भित कीवर्ड के साथ मुश्किल हैं; सफलता के मामलों को काम करना वास्तव में बहुत सरल है।

लेकिन वास्तव में, यह इतना नहीं है कि हार्ड प्रासंगिक बनाने के लिए संदर्भित करने के लिए यह वास्तव में बड़ी जीत नहीं है। "सेट" और "वैल्यू" प्रासंगिक बनाना एक बड़ी जीत थी क्योंकि हमने माना कि सभी प्रकार के लोग "सेट" और "वैल्यू" जैसे नामों के साथ स्थानीय चर बनाने की इच्छा रखते हैं। "पैराम्स" भी एक अंग्रेजी शब्द नहीं है, इसलिए ऐसा लगता है कि कोई भी इसका उपयोग करना चाहता है। इसे प्रासंगिक बनाने के लिए कोई बड़ा लाभ नहीं है, इसलिए सुविधा की लागत उचित नहीं है।

+0

धन्यवाद एरिक। मैं वास्तव में आपके मन में जो कुछ भी पढ़ रहा था उसे पढ़ने की उम्मीद कर रहा था। मेरे लिए ऐसा लगता है कि वैध मामले होंगे 1. क्या कोई पैराम प्रकार उपलब्ध है? 2. यदि नहीं, तो टाइप [] के रूप में और एक पहचानकर्ता के रूप में एक प्रकार होना चाहिए। मैं आपके जैसे विशेषज्ञ नहीं हूं, लेकिन क्या आपको लगता है कि यह सभी मामलों को शामिल करता है? इसके अलावा आप सही हैं, यह एक अंग्रेजी शब्द नहीं है, सिर्फ सोचा कि यह पैरामीटर/लिखने के बजाय कुछ कोड में उपयोगी होगा। –

2

पैराम कीवर्ड कीवर्ड पैरामीटर घोषणा में केवल उपयोगी दिखता है, लेकिन मैं वास्तव में एमएस के साथ सहमत हूं कि कीवर्ड नामों के उदाहरणों के लिए इस्तेमाल करने का अच्छा विचार नहीं होगा, वैसे भी।

params Customers = DB.GetCustomerList(); 

या अन्यथा रूप में अच्छी तरह से एक स्थानीय दायरे में params अनुमति देते हैं:

शायद वे में कुछ इस तरह सी # 8.0 की क्षमता आरक्षित कर रहे हैं।

+0

लेकिन वह क्या करेगा? मेरे द्वारा स्थानीय क्षेत्र में इसका उपयोग करने के लिए आपको बहुत अधिक समझ नहीं आएगी, है ना? मुझे यकीन नहीं है। सी # 8.0 कब बीटीडब्ल्यू बाहर आ रहा है? : ओ –

+1

मुझे लगता है कि मेरी क्रिस्टल बॉल सटीक है तो 2017 के आसपास मुझे लगता है। –

+1

जोन - अच्छा सवाल। मुझे नहीं पता कि वह क्या करेगा। असल में, मुझे यह भी नहीं लगता कि कोड की रेखा सिंटैक्स त्रुटि के कारण सी # 8.0 में संकलित होगी। – Flipster

9

किसी अन्य कीवर्ड के बारे में भी यही पूछा जा सकता है। उदाहरण के लिए, "कक्षा" प्रासंगिक क्यों नहीं है क्योंकि इसका उपयोग कक्षा घोषणाओं में ही किया जाता है?

मेरे लिए एक कीवर्ड एक कीवर्ड है। मुझे कल्पना है कि यह संकलन के व्याख्यात्मक विश्लेषण भाग को बहुत सरल बनाता है ताकि संदर्भ को अवगत न हो।

एक के रूप में अलग रूप में, आप आप एक चर 'परम' कहा जाता है (या किसी अन्य आरक्षित कीवर्ड) घोषित करने के लिए अनुमति देने के लिए @ प्रतीक का उपयोग कर सकते हैं:

var @params = new int[] { 1, 2 }; 
+0

धन्यवाद लेकिन यदि कक्षा प्रासंगिक थी तो वे नेस्टेड कक्षा के उपयोग को अलग कैसे करेंगे? लेकिन परम के साथ, इसका उपयोग करने के लिए कोई अन्य जगह नहीं है, और ऐसा लगता है कि उन्हें अलग करना आसान होगा, लेकिन मैं एरिक लिपर्ट की तरह एक कंपाइलर मास्टरो नहीं हूं। –

+0

मुझे लगता है कि आप सामान्य वर्ग घोषणा वाक्यविन्यास की तलाश करके 'वर्ग' प्रासंगिक बनाने की कोशिश कर सकते हैं: [अभिगम्यता संशोधक] वर्ग [वर्ग का नाम] {}। लेकिन मैं यह जानने के लिए पर्याप्त संकलक नमूना पर नहीं हूं कि यह वास्तव में व्यवहार्य है या नहीं। –

+0

ठीक है कि समझ में आता है। –

4

एरिक Lippert contextual and reserved keywords और कवर एक ब्लॉग पोस्ट किया है उनके इतिहास। हालांकि यह स्पष्ट रूप से समझा नहीं गया है कि क्यों आरक्षित आरक्षित सूची में है (यह 1.0 के बाद से रहा है), इसका तात्पर्य यह है कि यह आरक्षित शब्दों के सेट से संबंधित है जो संदर्भ बनाने के लिए हार्ड होगा।

+0

धन्यवाद, आरक्षित शब्द क्या हैं? मैंने सोचा कि इसका मतलब है कि यह भविष्य में नए संभावित उपयोगों के लिए आरक्षित है? –

+2

@ जोन - कुछ हो सकते हैं, लेकिन अधिकांश * आरक्षित * हैं जैसे "केवल इस उद्देश्य के लिए आरक्षित"। – tvanfosson

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