2009-07-31 16 views
5

इस डिकोटॉमी के तरीके से हम f # में कक्षाएं बना सकते हैं जो वास्तव में मुझे परेशान करता है। मैं या तो एक अंतर्निहित प्रारूप या एक स्पष्ट का उपयोग कर कक्षाएं बना सकता हूं। लेकिन कुछ विशेषताओं जो मैं चाहता हूं केवल अंतर्निहित प्रारूप के उपयोग के लिए उपलब्ध हैं और कुछ केवल स्पष्ट प्रारूप के उपयोग के लिए उपलब्ध हैं।एफ # ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग

उदाहरण के लिए:

  1. मैं let inline * (या अकेले let) एक स्पष्ट रूप से परिभाषित वर्ग के भीतर उपयोग नहीं कर सकते।

  2. एक ही रास्ता (है कि मैं जानता हूँ कि) अपरिवर्तनीय सार्वजनिक क्षेत्रों एक परोक्ष परिभाषित वर्ग के अंदर (नहीं गुण *) को परिभाषित करने के val bla : bla वाक्य रचना है।

    लेकिन यहां एक अनावश्यकता है। चूंकि मैं एक ही अपरिवर्तनीय डेटा की दो प्रतियों के साथ समाप्त हो जाऊंगा, एक निजी, एक सार्वजनिक (क्योंकि अंतर्निहित मोड में कन्स्ट्रक्टर पैरामीटर पूरे वर्ग अस्तित्व में बने रहते हैं)

  3. (इतना प्रासंगिक नहीं) गुणों का उपयोग करने की आवश्यकता विधि अधिभार के लिए और फ़ील्ड के डिफ़ॉल्ट के लिए डालने के बजाए है।

क्या वैसे भी मैं इस के आसपास काम कर सकता हूं?

* प्रदर्शन के कारणों के

संपादित करें के लिए: बाहर कर देता है मैं दोनों अंक (धन्यवाद गणेश सिटटमपालम & MichaelGG) के बारे में गलत हूँ।

  1. जब मैं दोनों अंतर्निहित & स्पष्ट वर्ग परिभाषा let inline उपयोग नहीं कर सकते, मैं member inline ठीक है, जो मुझे लगता है एक ही बात करता है का उपयोग कर सकते हैं।

  2. स्पष्ट रूप से नवीनतम एफ # के साथ अब कोई रिडंडेंसी नहीं है क्योंकि कक्षा के शरीर में उपयोग किए जाने वाले किसी भी पैरामीटर कन्स्ट्रक्टर के लिए स्थानीय नहीं हैं।

  3. Will be gone अगले एफ # रिलीज में।

+0

"प्रदर्शन कारणों से"? यह नहीं कह सकता कि मुझे इसकी आवाज़ पसंद है;) – Juliet

+0

यह ग्राफिक्स प्रोग्रामिंग से संबंधित अधिकतर संख्या क्रंचिंग है। यहां देखें: http://blogs.msdn.com/ricom/archive/2006/09/07/745085.aspx। –

+0

आपका प्रश्न उस समस्या का संकेत नहीं देता है जिसे आप हल करने का प्रयास कर रहे हैं। मुझे लगता है कि आप एफ # में सी ++ शैली ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का अनुकरण करना चाहते हैं। (अगर आप नहीं हैं तो मुझे सही करो!)। लेकिन आपको एक कार्यात्मक भाषा में इसकी आवश्यकता क्यों थी? मुझे लगता है कि यह उस समस्या के लिए विशेष है जिस पर आप काम कर रहे हैं और यदि आप यहां इसके बारे में विस्तृत पोस्ट करते हैं तो यह दिलचस्प हो सकता है। –

उत्तर

5

यह मदद नहीं कर सकता है, लेकिन आप सदस्यों को इनलाइन बना सकते हैं। "सदस्य इनलाइन प्राइवेट" ठीक काम करता है।

+0

यह मदद करता है। धन्यवाद। मतलब मैं स्पष्ट वाक्यविन्यास का उपयोग कर बसूंगा। –

1

let inline के लिए, आप कक्षा के बाहर ले जाकर और स्पष्ट रूप से कोई भी मान आप जब यह बुला वर्ग के दायरे के अंदर से की जरूरत है पारित करके आस-पास काम कर सकते हैं। चूंकि इसे रेखांकित किया जाएगा, ऐसा करने के लिए कोई प्रदर्शन दंड नहीं होगा।

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