2013-02-23 70 views
8

:एक प्रतिनिधि को तत्काल करने के विभिन्न तरीकों के बीच अंतर (Func <T, T>)?

Func<int, int> myFunc = new Func<int,int>(delegate(int x) { 
    return x + 1; 
}); 

:

Func<int, int> myFunc = delegate(int x) { 
    return x + 1; 
}; 

:

Func<int, int> myFunc = x => x + 1; 

उन दोनों के बीच क्या अंतर है?

+0

[प्रतिनिधि कीवर्ड बनाम लैम्ब्डा अंकन] (की डुप्लीकेट http://stackoverflow.com/questions/208381/whats-the-difference-between-anonymous-methods-c-2-0- और-लैम्ब्डा-अभिव्यक्तियां) और [नई क्रिया() और लैम्बडा के बीच क्या अंतर है?] (http://stackoverflow.com/questions/765966/what-is-the-difference-between- new-action-and -ए-लैम्ब्डा) – nawfal

उत्तर

7

वे सभी एक ही कर रहे हैं है। पहले दो anonymous methods के उदाहरण हैं। अंतिम lambda expression का एक उदाहरण है। बेनामी विधियों और लैम्ब्डा अभिव्यक्ति सामूहिक रूप से अज्ञात कार्य कहा जाता है।

सी # 2 में बेनामी तरीके पेश किए गए; लैम्ब्डा अभिव्यक्तियों को सी # 3 में पेश किया गया था और ज्यादातर अज्ञात विधियों का अधिग्रहण किया गया था। ध्यान दें कि लैम्ब्डा अभिव्यक्तियों को भी expression trees में परिवर्तित किया जा सकता है जो आईएल के बजाय डेटा के रूप में कोड के रूप में कोड का प्रतिनिधित्व करता है।

ध्यान दें कि Func<TResult>, Func<T, TResult> आदि प्रतिनिधि प्रकारों के उदाहरण हैं। आप अज्ञात कार्यों को किसी भी संगत प्रतिनिधि प्रकार में परिवर्तित कर सकते हैं। उदाहरण के लिए:

public delegate int Foo(string x); 

Foo foo = text => text.Length; 
+0

तो अनाम कार्य और Func के बीच क्या अंतर है? क्या वे वही हैं? –

+0

@Lior: 'Func' सिर्फ एक प्रतिनिधि प्रकार का नाम है। –

+0

आपको बहुत बहुत धन्यवाद :) –

8

वे सभी समान हैं - बस syntactic sugar जो एक ही चीज़ के लिए संकलित करता है।

यही कारण है - प्रकार निष्कर्ष और अन्य संकलक उपहार के साथ, 3 सिर्फ एक बहुत ही बहुत ही कम जिस तरह से कहने के लिए 1.

+0

तो अनाम कार्य और Func के बीच क्या अंतर है? क्या वे समान हैं? –

+0

@Lior - 'Func' एक परिभाषित प्रतिनिधि है। एक अज्ञात फ़ंक्शन में नामित प्रतिनिधि प्रकार नहीं होता है। – Oded

+0

@Lior, हां वे रनटाइम पर समान हैं लेकिन कंपाइलर को समझने के लिए उन्हें परिभाषित करने में अंतर है कि यह एक प्रतिनिधि है जो इन विशिष्ट प्रकार के पैरामीटर स्वीकार करता है और एक विशिष्ट प्रकार देता है। – Somnath