एक नामस्थान एक नेट चीज है, जो कई औद्योगिक-शक्ति भाषाओं में आम है, ढांचे को व्यवस्थित करने और विभिन्न पुस्तकालयों के बीच संघर्षों को नाम देने से बचने का एक तरीका है। आप और मैं दोनों एक प्रकार "फू" को परिभाषित कर सकते हैं और दोनों परियोजनाओं में उनका उपयोग कर सकते हैं, बशर्ते वे अलग-अलग नामस्थानों (उदा। NS1.Foo और NS2.Foo) में हों। .NET में नेमस्पेस प्रकार होते हैं।
एक मॉड्यूल एक एफ # चीज है, यह लगभग "स्थैतिक वर्ग" के समान है ... यह एक ऐसी इकाई है जो लेट-बाध्य मानों और कार्यों, साथ ही प्रकारों को भी रख सकती है (ध्यान दें कि नामस्थान सीधे मूल्य नहीं रख सकते/फ़ंक्शंस, नेमस्पेस में केवल प्रकार हो सकते हैं, जिसमें स्वयं मूल्य और फ़ंक्शन शामिल हो सकते हैं)। मॉड्यूल के अंदर की चीजों को "मॉड्यूलनाम। टिंग" के माध्यम से संदर्भित किया जा सकता है, जो नामस्थानों के लिए समान वाक्यविन्यास है, लेकिन एफ # में मॉड्यूल को अयोग्य पहुंच की अनुमति देने के लिए 'खोला' भी जा सकता है, उदा।
open ModuleName
...
Thing // rather than ModuleName.Thing
(संपादित करें: नेमस्पेस भी इसी तरह खोला जा सकता है, लेकिन तथ्य यह है कि मॉड्यूल मूल्यों और कार्य शामिल कर सकते हैं मूल्यों और काम करता है, उदाहरण के लिए "क्योंकि के साथ हवा सकता है कि, एक मॉड्यूल अधिक 'दिलचस्प' खोलने बनाता है ", नाम होने के नाते आप सीधे उपयोग कर सकते हैं, जबकि अन्य .Net भाषाओं में आपको आमतौर पर इसे अर्हता प्राप्त करना होगा, उदाहरण के लिए" Math.cos ")।
यदि आप एफ # में 'शीर्ष स्तर' पर कोड टाइप करते हैं, तो यह कोड निश्चित रूप से मॉड्यूल में जाता है।
आशा है कि कुछ हद तक मदद मिलेगी, यह एक सुंदर खुला-अंत प्रश्न है। :)
और एक और नोट, जब आप F # में नामस्थान खोलते हैं, जैसे सिस्टम, आपको इसके उप नामस्थानों तक पहुंच मिलती है। तो सी # में, यदि आप सिस्टम खोलते हैं, तो आपको अभी भी "System.IO.File" लिखना होगा। एफ # में, आप "आईओ.फाइल" लिख सकते हैं। मुझे लगता है कि यह कोड को बहुत अच्छा बनाता है। – MichaelGG