2013-09-16 19 views
5

का उपयोग मैं निम्नलिखित निर्माता घोषित प्रिज्म देखते हैं, और मुझे समझ नहीं आता क्या है कि 'ओ' लैम्ब्डा समारोह है कि दूसरा पैरामीटर जब आधार निर्माता कहा जाता है के रूप में कार्य के साथ इस्तेमाल किया जा रहा:लैम्ब्डा समारोह अज्ञात पैरामीटर

public DelegateCommand(Action<T> executeMethod) 
    : this(executeMethod, (o)=>true) 
{    
} 

मैं एक स्पष्टीकरण की सराहना करता हूं।

+0

यह एक विधेय है कि इस्तेमाल नहीं करने के लिए सिर्फ एक इनपुट पैरामीटर है - इस मामले में विधेय हमेशा सच रिटर्न - मुझे लगता है कि संदेह है एक डिफ़ॉल्ट कोई विधेय में पारित हो जाता है – BrokenGlass

+0

इस [ट्यूटोरियल]। (http://msdn.microsoft.com/en-us/library/vstudio/bb882516.aspx) अज्ञात विधियों और लैम्ब्डा को समझने में आपकी सहायता करेगा। बीटीडब्ल्यू यह सिर्फ एक इनपुट पैरामीटर है। –

उत्तर

3

यह इस निर्माता कहता है:

DelegateCommand<T>(Action<T>, Func<T, Boolean>) 

एक लैम्ब्डा कि हमेशा दूसरा पैरामीटर

11

निर्माता जो घोषणा आप कॉल एक और निर्माता के रूप में तैनात सच देता है, तो यह समझाने के लिए पासिंग, हम पहले देखना चाहिए अन्य रचनाकार के हस्ताक्षर पर:

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod) 

तो दूसरा पैरामीटर Func<T, bool> है। इसका मतलब है कि यह एक ऐसा फ़ंक्शन है जो T प्रकार का पैरामीटर लेता है और एक बूलियन देता है।

अब

अगर आप लैम्ब्डा कि प्रयोग किया जाता है पर नज़र डालें:

(o) => true 

सामान्य रूप में lambdas, वाक्य रचना (parameter-list) => lambda-body है इसलिए इस मामले में, लैम्ब्डा की एकल पैरामीटर एक चर o है (प्रकार अनुमानित है जो T होने के लिए) और फ़ंक्शन निरंतर परिणाम true देता है।

इसका उद्देश्य मूल रूप से एक आदेश बनाना है जो हमेशा निष्पादन योग्य होता है।

बेशक, लैम्ब्डा बहुत अधिक जटिल लग सकता है, इसलिए प्रतिनिधिमंडल का उपयोग करते समय, आप अधिक जटिल और गैर-निरंतर अभिव्यक्तियों का उपयोग करने की संभावना रखते हैं। उदाहरण के लिए:

new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty) 
+0

मुझे पता है कि लैम्ब्डा फ़ंक्शन क्या हैं, और PRISM और इस बेस कन्स्ट्रक्टर से परिचित हैं (जब भी कमांड हमेशा सक्रिय होता है) का उपयोग किया जा सकता है। मैंने अभी SYNTAX के बारे में पूछा। आपने यह कहते हुए जवाब दिया "इस मामले में, लैम्ब्डा का एकल पैरामीटर एक परिवर्तनीय ओ है (किस प्रकार का टी होने का अनुमान है)", लेकिन मुझे अभी भी समझ में नहीं आता कि क्यों "ओ", क्योंकि एकल पैरामीटर पहले से ही दिया गया था नाम "executeMethod"। अग्रिम में धन्यवाद! – Ofer

+1

@Ofer पूरी अभिव्यक्ति '(o) => true' प्रकार 'Func ' प्रकार है और कन्स्ट्रक्टर पैरामीटर 'canExecuteMethod' के लिए मान है। 'o' केवल वैरिएबल नाम है, जिसे इस मामले में स्वतंत्र रूप से चुना गया है, जो 'Func ' पैरामीटर का फ़ंक्शन तर्क लेता है। इसके बजाय आप इसे 'पैरामीटर के लिए TheCanExecuteMethod' नाम दे सकते हैं:' (पैरामीटरToTheCanExecuteMethod) => true'। यदि यह विचलन को और स्पष्ट करता है, तो आप अतिरिक्त कोष्ठक भी जोड़ सकते हैं: '...: यह (executeMethod, ((पैरामीटरToTheCanExecuteMethod) => सत्य)) '। – poke

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