2013-03-04 5 views
6

अगर हमएफ # प्रकार के लिए निजी संशोधक

module M 

type private A = B | C 

(...) 

निजी संशोधक मतलब यह है कि एक ही मॉड्यूल एम के भीतर से प्रयोग करने योग्य हो जाएगा लेकिन इस मामले में है:

namespace N 

type private A = B | C 

(...) 

क्या होगा उस निजी संशोधक का प्रभाव? सीएलआर नेमस्पेस के लिए निजी सदस्यों के लिए यह समझ में नहीं आता है, क्योंकि नेमस्पेस इच्छा पर बढ़ाया जा सकता है, तो क्या निजी संशोधक का कोई असर होगा?

उत्तर

6

यदि आप नामस्थान के भीतर private संशोधक का उपयोग करते हैं, तो यह फ़ाइल या प्रकार के लिए निजी या प्रकार का मॉड्यूल बनाता है - यानी, उसी फ़ाइल के नीचे किसी भी चीज़ द्वारा इसका उपयोग किया जा सकता है।

जब प्रकार संकलित किया जाता है, तो एफ # कंपाइलर इसे .NET मेटाडेटा के भीतर internal के रूप में मानता है। (जो समझ में आता है, क्योंकि प्रकार वास्तव में internal है - कंपाइलर केवल उस बाधा को लागू करता है जिसका उपयोग केवल उसी फ़ाइल के प्रकार/कार्यों द्वारा किया जा सकता है।)

मैं इस सुविधा का अक्सर उपयोग करता हूं बीटीडब्ल्यू - यह अच्छा है छोटे सहायक प्रकारों के लिए जो केवल कुछ स्थानों में आंतरिक रूप से उपयोग किए जाते हैं क्योंकि यह उन्हें IntelliSense को अपनाने से रोकता है।

संपादित करें: फ़ाइल-स्कॉप्ड, "अंतर्निर्मित" सहायक कार्यों को बनाने के लिए आप इसका उपयोग कर सकते हैं एक और शानदार चाल है।

आप इस तरह एक मॉड्यूल बनाते हैं, तो उस में काम करता है यह नीचे कुछ भी करने के लिए स्वचालित रूप से उपलब्ध हो जाएगा ([<AutoOpen>] करने के लिए धन्यवाद) लेकिन जब से मॉड्यूल private कार्यों चिह्नित है अपने IntelliSense (को अवरुद्ध नहीं होगा जब पर काम कर अपने अन्य स्रोत फाइलें) या मौजूदा कार्यों को छुपाएं।

[<AutoOpen>] 
module private Helpers = 
    let [<Literal>] blah = "blah" 

    let lessThanTwo value = 
     value < 2.0 
+1

इनमें से कोई भी चाल (निजी प्रकार या निजी मॉड्यूल) मेरे लिए काम नहीं करता है। मैं एफ # 3.1 और .NET 4.5.1 का उपयोग कर रहा हूँ। मेरा निजी प्रकार किसी अन्य फ़ाइल से प्रयोग योग्य है, और यदि मैं आपके हेल्पर्स मॉड्यूल को दो अलग-अलग फ़ाइलों में पेस्ट करता हूं, तो मुझे एक संकलन त्रुटि मिलती है कि एक ही नाम के साथ दो मॉड्यूल हैं। – bananasareyellow

+1

https://github.com/Microsoft/visualfsharp/issues/43#issuecomment-70650925 – bananasareyellow

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