2015-10-26 8 views
6

एक गैर-समापन #region क्यों एक संकलक त्रुटि का कारण बनता है? आखिरकार, इस क्षेत्र का संकलन कोड पर बिल्कुल कोई प्रभाव नहीं पड़ता है, है ना?#region संकलन त्रुटियों को क्यों बनाते हैं?

मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि यह एक प्रीप्रोसेसर निर्देश है, लेकिन वह क्यों है? इसका उपयोग अन्य निर्देशों की तरह नहीं किया जाता है।

class Application 
{ 
    #region Whatever <- Causes an error. 
    static void Main(string[] c) 
    { 

    } 

} 

इसे क्यों अनदेखा नहीं किया जा सकता है? या क्या ऐसी सुविधा है जो मुझे #region के बारे में नहीं पता है जो बताती है कि इसे क्यों संकलित किया गया है?

संपादित करें: मुझे लगता है कि यह उदाहरण संकलित नहीं है क्योंकि #endregion कोई संगत नहीं है। लेकिन क्या इसे किसी XML टिप्पणी में अनुपलब्ध समापन टैग के रूप में नहीं माना जाना चाहिए? मेरा मतलब है, यह वही महत्व है ना?

दूसरा संपादन: मैं #region को प्रीप्रोसेसर निर्देश बनाने के पीछे डिजाइन निर्णय को समझना चाहता हूं। क्यों न सिर्फ एक टिप्पणी है कि आईडीई कोड के एक क्षेत्र के रूप में पहचाना जाएगा जिसे ध्वस्त किया जा सकता है?

+3

यह संकलित नहीं होता है क्योंकि प्रीप्रोसेसर कुछ होने की अपेक्षा करता है, और इसे नहीं मिल सकता है, इसलिए यह त्रुटिपूर्ण हो जाता है। आप सही हैं कि यह कोड को संशोधित नहीं करता है, हालांकि प्रीप्रोसेसर को मिलान वाले अंत टैग को देखने की आवश्यकता है। –

+0

नहीं, प्रीप्रोसेसर निर्देश का महत्व एक बेमेल एक्सएमएल टिप्पणी टैग से बहुत अलग है। – jrummell

+0

@jrummell वास्तव में, मेरी राय में, यह इसके विपरीत है। – AgentFire

उत्तर

14

गैर-समापन #region एक कंपाइलर त्रुटि का कारण क्यों बनता है?

क्योंकि specs ऐसा कहता है।

एक #region ब्लॉक को #endregion निर्देश के साथ समाप्त कर दिया जाना चाहिए।

हाँ, वे संकलित कार्यक्रम का हिस्सा नहीं होगा, लेकिन दूसरों के पूर्व प्रोसेसर निर्देशों परिभाषित कर सकते हैं, क्या कार्यक्रम का हिस्सा हो गया है, उदाहरण के #if DEBUGके लिए (कुछ में शामिल हैं)

2.5 Pre-processing directives

पूर्व प्रसंस्करण निर्देशों टोकन नहीं हैं और सी # के वाक्यात्मक व्याकरण का हिस्सा नहीं हैं। हालांकि, प्री-प्रोसेसिंग निर्देश टोकन के अनुक्रमों को शामिल या बहिष्कृत करने के लिए उपयोग किए जा सकते हैं और इस तरह सी # प्रोग्राम के अर्थ को प्रभावित कर सकते हैं।

लेकिन पूर्वप्रक्रमक भी #region टैग विचार कर रहा है, क्यों किया गया था यह एक पूर्वप्रक्रमक निर्देश के रूप में बनाया गया है और न सिर्फ टिप्पणी का एक और प्रकार:

अपने प्रश्न के लिए

?

क्षेत्रों आईडीई के लिए सहायक होते हैं (विजुअल स्टूडियो) उद्देश्य, यह बहुत मुश्किल (लगभग असंभव) गिर/क्षेत्रों के बिना कोड के विस्तार का एक ही सुविधा प्राप्त करने के लिए किया जाएगा।

Region directive:

कोई अर्थ अर्थ एक क्षेत्र से जुड़ा हुआ है (यह मेरा अनुमान है, Microsoft से देव टीम के केवल एक सदस्य इस जवाब सकता है); क्षेत्रों का उद्देश्य प्रोग्रामर द्वारा या स्वचालित उपकरण द्वारा स्रोत कोड के एक अनुभाग को चिह्नित करने के लिए किया गया है। #region या #endregion निर्देश में निर्दिष्ट संदेश का अर्थ कोई अर्थपूर्ण अर्थ नहीं है; यह केवल पर सेवा करता है जो इस क्षेत्र की पहचान करता है। मिलान #region और #endregion निर्देश में अलग-अलग पीपी-संदेश हो सकते हैं।

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