कुछ वर्ग विधि में, ए, मुझे लाइब्रेरी विधि बी को कॉल करने की आवश्यकता है, जो पैरामीटर के रूप में IProgress<Object>
के रूप में लेता है।सी # क्या इंटरफ़ेस की आवश्यकता होने पर लैम्बडा की आपूर्ति करना संभव है?
आम तौर पर, मैं या तो कक्षा के हिस्से के रूप में IProgress<Object>
लागू कर सकता हूं जहां ए रहता है, और उसके बाद "यह" विधि बी को पास कर सकता है या शायद मैं एक नई कक्षा बना सकता हूं जिसका एकमात्र उद्देश्य IProgress<Object>
को लागू करना है और इसे सही तरीके से संभालना है-- फिर इस मामले में मैं उस वर्ग का एक उदाहरण बनाउंगा और बी
परन्तु जो मैं वास्तव में चाहता हूं वह IProgress<Object>
का कार्यान्वयन करना है जिसमें मैं बी को बुला रहा हूं, कि कॉलिंग कोड और IProgress<Object>
कार्यान्वयन के बीच एक दृश्य डिस्कनेक्ट कम है। (मैं अपने प्रगति के कार्यान्वयन को एक निजी, गैर-साझा कॉलिंग विधि के प्रकार के रूप में समझने पर विचार करता हूं और इस प्रकार मैं IProgress<Object>
के कार्यान्वयन को पूरी तरह से एक पूरी कक्षा के पूरी तरह से अलग तरीके से नहीं करना चाहता)।
method in class A {
...
Action<Object> Report = (m) => { // do something useful with m };
B(Report)
}
method B(IProgress<Object> reporter) {
reporter.Report(some object)
}
बेशक
, मुझे पता है:
मैं क्या करने की कोशिश कर रहा है एक लैम्ब्डा जिसमें मैं तो निपटने मेरी कम प्रगति को परिभाषित है, और का उपयोग किसी भी तरह इस तरह, बी को इस लैम्ब्डा पारित है यह क्यों काम नहीं करेगा - बी एक ऑब्जेक्ट चाहता है जो IProgress<Object>
लागू करता है और मैं इसे इसके बजाय एक क्रिया ऑब्जेक्ट सौंप रहा हूं।
क्या हासिल करने का प्रयास करने का कोई तरीका है? (आईई मेरी कार्यान्वयन अगर IProgress<Object>
विधि एक के अंदर दिखाई देते हैं?
सी # lambdas गुमनाम प्रतिनिधियों हैं
यह उदाहरण अपनी परियोजना पृष्ठ से है । आपको जो चाहिए वह एक अज्ञात प्रकार है जो इंटरफ़ेस लागू करता है। सी # प्रदान करता है जो केवल सार्वजनिक-गुणों के अज्ञात प्रकारों पर कुछ कामकाज के लिए [इस सवाल] (http://stackoverflow.com/questions/191013/can-a-c-sharp-anonymous-class-implement-an-interface) देखें। –