2010-10-10 7 views
13

मेरे पास निम्नलिखित सी # कोड है।एफ # से सी # ऑब्जेक्ट का उपयोग कैसे करें?

namespace MyMath { 
    public class Arith { 
     public Arith() {} 
     public int Add(int x, int y) { 
      return x + y; 
     } 
    } 
} 

और मैं एफ # testcs.fs इस वस्तु का उपयोग करने के नाम पर रखा गया कोड के साथ आया था।

open MyMath.Arith 
let x = Add(10,20) 

जब मैं निम्न आदेश

 
fsc -r:MyMath.dll testcs.fs 

मैं इस त्रुटि संदेश मिला चलाते हैं।

 
/Users/smcho/Desktop/cs/namespace/testcs.fs(1,13): error FS0039: The namespace 'Arith' is 
not defined 

/Users/smcho/Desktop/cs/namespace/testcs.fs(3,9): error FS0039: The value or constructor 
'Add' is not defined 

क्या गलत हो सकता है? मैंने .NET पर्यावरण के लिए मोनो का इस्तेमाल किया।

उत्तर

15

कोशिश

open MyMath 
let arith = Arith() // create instance of Arith 
let x = arith.Add(10, 20) // call method Add 

Arith अपने कोड में वर्ग के नाम, आप नाम स्थान की तरह यह नहीं खोल सकता है। संभवतः आप एफ # मॉड्यूल खोलने की क्षमता के साथ उलझन में हैं, इसलिए इसके कार्यों का उपयोग योग्यता

+0

यह ठीक काम करता है। धन्यवाद। – prosseek

7

चूंकि Arith एक वर्ग है और नामस्थान नहीं है, तो आप इसे नहीं खोल सकते हैं। आप इस के बजाय कर सकते हैं:

open MyMath 
let x = Arith().Add(10,20) 
+0

यह ठीक काम करता है। धन्यवाद। – prosseek

3

खुला के साथ किया जा सकता है, आप केवल नामस्थान ही मॉड्यूल (जैसे कीवर्ड का उपयोग कर सी #) खोल सकते हैं। नेमस्पेस नामस्थान कीवर्ड के साथ परिभाषित किए गए हैं, और सी # और एफ # दोनों में समान कार्य करते हैं। हालांकि, मॉड्यूल वास्तव में केवल स्थिर वर्ग हैं, केवल स्थिर सदस्य हैं - एफ # सिर्फ आपके द्वारा छुपाता है।

यदि आप परावर्तक के साथ एक एफ # कोड देखते हैं, तो आप देखेंगे कि आपका मॉड्यूल एक स्थिर वर्ग के रूप में संकलित किया गया है। इस कारण से आप केवल स्थिर कक्षाओं को F # में मॉड्यूल के रूप में उपयोग कर सकते हैं, और आपके उदाहरण में, कक्षा स्थिर नहीं है, इसलिए इसका उपयोग करने के लिए, आपको ऑब्जेक्ट इंस्टेंस बनाना होगा - जैसा कि आप सी # में करेंगे।

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