सी # में हम कुछ इस तरह से करते हैं।
अगला, हम एक विधि Curry
घोषित करते हैं जो Action<T>
स्वीकार करता है और Action
देता है। सामान्यतः, Action<T>
एक प्रतिनिधि है जो T
प्रकार का एक पैरामीटर स्वीकार करता है और void
देता है। विशेष रूप से, Foo
एक Action<int>
है क्योंकि यह int
प्रकार का एक पैरामीटर स्वीकार करता है और void
देता है। Curry
के रिटर्न प्रकार के लिए, इसे Action
के रूप में घोषित किया गया है। एक Action
एक प्रतिनिधि है जिसमें कोई पैरामीटर नहीं है और void
देता है।
Curry
की परिभाषा दिलचस्प है। हम लैम्ब्डा अभिव्यक्ति का उपयोग करके एक क्रिया को परिभाषित कर रहे हैं जो एक अज्ञात प्रतिनिधि का एक बहुत ही विशेष रूप है। प्रभावी ढंग से
() => action(parameter)
का कहना है कि void
पैरामीटर action
parameter
पर मूल्यांकन किया जाता करने के लिए मैप किया गया है।
अंत में, Main
में हम curried
नामित Action
का एक उदाहरण पैरामीटर 5
साथ Foo
को Curry
लागू करने का परिणाम है कि घोषित कर रहे हैं। यह आपके सी ++ उदाहरण में bind(fun_ptr(foo), 5)
के समान भूमिका निभाता है।
आखिरकार, हम नए गठित प्रतिनिधि curried
को वाक्यविन्यास curried()
के माध्यम से आमंत्रित करते हैं। यह आपके उदाहरण में someCallback()
जैसा है।
इसके लिए फैंसी शब्द currying है।
class Program {
static Func<TArg, TResult> Curry<TArg, TResult>(
Func<TArg, TArg, TResult> func,
TArg arg1
) {
return arg => func(arg1, arg);
}
static int Add(int x, int y) {
return x + y;
}
static void Main(string[] args) {
Func<int, int> addFive = Curry<int, int>(Add, 5);
Console.WriteLine(addFive(7));
}
}
यहाँ हम एक विधि Curry
कि एक प्रतिनिधि (Func<TArg, TArg, TResult>
कि एक ही प्रकार TArg
के दो पैरामीटर स्वीकार करता है और कुछ अन्य की एक मान देता है स्वीकार करता है की घोषणा कर रहे हैं:
एक और अधिक दिलचस्प उदाहरण के रूप में निम्नलिखित पर विचार TResult
और प्रकार TArg
की एक पैरामीटर टाइप करें और एक प्रतिनिधि है कि प्रकार TArg
की एक एकल पैरामीटर स्वीकार करता है और प्रकार TResult
(Func<TArg, TResult>
) के एक मान देता है देता है।
फिर, एक परीक्षण के रूप में हम एक विधि Add
घोषित करते हैं जो int
प्रकार के दो पैरामीटर स्वीकार करता है और int
(Func<int, int, int>
) का पैरामीटर देता है। फिर Main
में हम addFive
नामक एक नए प्रतिनिधि को तुरंत चालू करते हैं जो एक विधि की तरह कार्य करता है जो इसके इनपुट पैरामीटर में पांच जोड़ता है। इस प्रकार
Console.WriteLine(addFive(7));
कंसोल पर 12
प्रिंट करता है।
आपके विस्तृत उत्तर के लिए धन्यवाद। मैंने दूसरे को स्वीकृत उत्तर के रूप में चिह्नित किया क्योंकि यह अधिक संक्षिप्त है, हालांकि इसमें कुछ महत्वपूर्ण विवरण शामिल हैं जिनमें आपका शामिल है। – Catskul
निश्चित रूप से। मुझे उम्मीद है कि अतिरिक्त रंग मदद करता है। :-) – jason
बेहद उपयोगी उत्तर, यह। आसानी से समझने के तरीके में एक शानदार अवधारणा, करीना शुरू किया। निश्चित रूप से यह मेरे मानसिक टूलबॉक्स में जोड़ देगा। –