2009-04-27 29 views
64

मैंने अभी एफ # सीखना शुरू कर दिया है (.NET के साथ थोड़ा पूर्व अनुभव के साथ) तो मुझे शायद एक बहुत ही सरल सवाल के लिए क्षमा करें: नामस्थान और एफ # में मॉड्यूल के बीच क्या अंतर है?एफ # में नामस्थान और मॉड्यूल के बीच क्या अंतर है?

धन्यवाद

डेव

संपादित करें: जवाब ब्रायन के लिए धन्यवाद। मैं यही जानना चाहता था। बस एक स्पष्टीकरण: क्या आप नामस्थान भी खोल सकते हैं (कथन का उपयोग कर सी # के समान)?

+3

और एक और नोट, जब आप F # में नामस्थान खोलते हैं, जैसे सिस्टम, आपको इसके उप नामस्थानों तक पहुंच मिलती है। तो सी # में, यदि आप सिस्टम खोलते हैं, तो आपको अभी भी "System.IO.File" लिखना होगा। एफ # में, आप "आईओ.फाइल" लिख सकते हैं। मुझे लगता है कि यह कोड को बहुत अच्छा बनाता है। – MichaelGG

उत्तर

78

एक नामस्थान एक नेट चीज है, जो कई औद्योगिक-शक्ति भाषाओं में आम है, ढांचे को व्यवस्थित करने और विभिन्न पुस्तकालयों के बीच संघर्षों को नाम देने से बचने का एक तरीका है। आप और मैं दोनों एक प्रकार "फू" को परिभाषित कर सकते हैं और दोनों परियोजनाओं में उनका उपयोग कर सकते हैं, बशर्ते वे अलग-अलग नामस्थानों (उदा। NS1.Foo और NS2.Foo) में हों। .NET में नेमस्पेस प्रकार होते हैं।

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

open ModuleName 
... 
Thing // rather than ModuleName.Thing 

(संपादित करें: नेमस्पेस भी इसी तरह खोला जा सकता है, लेकिन तथ्य यह है कि मॉड्यूल मूल्यों और कार्य शामिल कर सकते हैं मूल्यों और काम करता है, उदाहरण के लिए "क्योंकि के साथ हवा सकता है कि, एक मॉड्यूल अधिक 'दिलचस्प' खोलने बनाता है ", नाम होने के नाते आप सीधे उपयोग कर सकते हैं, जबकि अन्य .Net भाषाओं में आपको आमतौर पर इसे अर्हता प्राप्त करना होगा, उदाहरण के लिए" Math.cos ")।

यदि आप एफ # में 'शीर्ष स्तर' पर कोड टाइप करते हैं, तो यह कोड निश्चित रूप से मॉड्यूल में जाता है।

आशा है कि कुछ हद तक मदद मिलेगी, यह एक सुंदर खुला-अंत प्रश्न है। :)

+0

यह पूरी तरह से सही नहीं हो सकता है। मॉड्यूल सी # में भी मौजूद हैं, क्या वे नहीं करते हैं ?: http://stackoverflow.com/questions/645728/what-is-a-module-in-net –

+1

ठीक है, नेटमोड्यूल है, जो एक .NET चीज है, और एक एफ # मॉड्यूल है, जो एक एफ # चीज है, और मुझे लगता है कि वीबी में मॉड्यूल का निर्माण हो सकता है, और सामान्य सॉफ्टवेयर इंजीनियरिंग अर्थ में कक्षाएं 'मॉड्यूल' हैं ... लेकिन मूल प्रश्न एफ # मॉड्यूल के बारे में था। – Brian

+1

एक महान लिंक है [यहां] (http://blogs.msdn.com/b/junfeng/archive/2005/02/12/371683.aspx), जो एक असेंबली और नेट मॉड्यूल के बीच संबंध बताता है - एक एकल असेंबली में 2 अलग-अलग भाषाओं में लिखे गए 2 नेटमोड्यूल हो सकते हैं। – Darius

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