2011-05-27 9 views
13

क्या एफ # में डीएलआर ऑब्जेक्ट (उदाहरण के लिए डायनामिक ऑब्जेक्ट सबक्लास इंस्टेंस) सदस्यों (गुणों और विधियों) तक पहुंचने का कोई तरीका है जो सी # गतिशील के समान है?एफ # डायनामिक ऑब्जेक्ट एक्सेस

उत्तर

9

nuget पर एक मॉड्यूल अब गतिशील ऑपरेटर लागू करने के लिए DLR का उपयोग करता है नहीं है। FSharp.Interop.Dynamic

इसमें बहुत से स्निपेट पर कई फायदे हैं।

  • प्रदर्शन यह डीएलआर कॉल जो कैशिंग को लागू करता है और एक पीसीएल पुस्तकालय
  • हैंडल तरीकों कि शून्य वापसी है के लिए Dynamitey का उपयोग करता है, तो आप एक बाध्यकारी अपवाद अगर आप उन के परिणाम को निरस्त नहीं है मिल जाएगा।
  • डीएलआर स्वचालित रूप से एक फ़ंक्शन द्वारा प्रतिनिधि वापसी को कॉल करने का मामला संभालता है, यह आपको FSharpFunc
  • के साथ ऐसा करने की अनुमति भी देगा! उपसर्ग ऑपरेटर सीधे गतिशील वस्तुओं और कार्यों का आह्वान करने के लिए आपके पास रनटाइम पर प्रकार नहीं है।

    यह खुला स्रोत, अपाचे लाइसेंस है, आप implementation और मूल इकाई परीक्षण example cases देख सकते हैं।

5

हां, यह है। आप F12 में ? ऑपरेटर का उपयोग कर सकते हैं, और यह .NET 4.0 में C# और VB.NET में डायनामिक टाइपिंग में भी वही करेगा। एक शुरुआत के लिए, आप टॉमस Petricek के ब्लॉग से इस नमूने गतिशील SqlDataReader पढ़ सकते हैं:

http://tomasp.net/blog/dynamic-sql.aspx

यहाँ अपने लेख से एक उद्धरण है:

इस अनुच्छेद में, हम कैसे दिखाई देंगी उपयोग करने के लिए गतिशील ऑपरेटर FO से ADO.NET का उपयोग करने का अनुभव नाटकीय रूप से बेहतर बनाने के लिए। गतिशील ऑपरेटर (वास्तव में उनमें से दो हैं) गतिशील का समर्थन करने का सरल तरीका F # में आक्रमण करते हैं। हम इसका इस्तेमाल कोड है कि लगभग एक साधारण विधि कॉल या संपत्ति पहुँच की तरह दिखता है, लेकिन (विधि या संपत्ति के नाम का उपयोग कर) कार्यावधि में गतिशील रूप से हल हो गई है लिखने के लिए कर सकते हैं। निम्न उदाहरण से पता चलता है कि हम क्या पर इस लेख के अंत में लिखने के लिए सक्षम हो जाएगा: क्या तुमने कभी किसी SQL संग्रहीत प्रक्रिया सीधे SqlCommand का उपयोग कर कॉल करने की कोशिश तो

// Call 'GetProducts' procedure with 'CategoryID' set to 1 
use conn = new DynamicSqlConnection(connectionString) 
use cmd = conn?GetProducts 
cmd?CategoryID <- 1 
conn.Open() 

// Read all products and print their names 
use reader = cmd.ExecuteReader() 
while reader.Read() do 
    printfn "Product: %s" reader?ProductName 

, तो आप निश्चित रूप से कर सकते हैं इस कोड स्निपेट के लालित्य की सराहना करें। चलो अब एक बड़ा उदाहरण पर एक नज़र और साफ चाल है कि इसे संभव बनाने के कुछ ले ...

और अधिक जानकारी के लिए, आप अपने लेख के बाकी पढ़ सकते हैं। एफ # में मुबारक गतिशील कोडिंग :)

+0

tnx। अजीब कैसे गूगल एफ # डीएलआर/गतिशील प्रेषण पर उस लिंक के साथ बंद नहीं किया: \ मेरे गूगल फू बेकार –

+0

आपका स्वागत है। आप सही हैं, यह Google क्वेरी में दिखाई नहीं दे रहा था। –

+1

असल में? एफ # में सी # में गतिशील के समान नहीं है और टॉमस की संग्रहीत प्रक्रिया उदाहरण डीएलआर का उपयोग नहीं करता है। टॉमस के उत्तर और अन्य जुड़े प्रश्न देखें। –

8

उल्लेख eriawan के रूप में, ? ऑपरेटर सी # में dynamic प्रकार की तरह एक सा व्यवहार करता है। एसक्यूएल को कॉल करने के बारे में आलेख डीएलआर से कुछ भी भरोसा नहीं करता है, क्योंकि आप ? ऑपरेटर का अपना कार्यान्वयन प्रदान कर सकते हैं और संकलक सीधे इसका उपयोग करता है।

मैं भी कैसे ? ऑपरेटर का उपयोग करने के डीएलआर, जो available on F# snippets है और वहाँ एक और अधिक sophisticated version by Matthew Podwysocki है का उपयोग कर के सदस्यों को फोन करने का एक संक्षिप्त उदाहरण लिखा था। एक और स्निपेट दिखाता है कि मानक .NET types using Reflection पर कॉल करने के लिए इसका उपयोग कैसे करें।

यह भी देखें: