सबसे पहले, आपके दो उदाहरण दो पूरी तरह से अलग चीजें कर रहे हैं। पहला एक सामान्य प्रतिनिधि चर घोषित कर रहा है और इसे एक मान दे रहा है, दूसरा केवल एक delegate
प्रकार को परिभाषित कर रहा है । आपका उदाहरण, और अधिक पूरी तरह से, होगा:
public static class Program
{
public delegate string ConvertedMethod(string value);
public static void Main()
{
Func<string, string> convertedMethod = s => s + ", Hello!";
ConvertedMethod convertedMethod2 = s => s + ", Hello!";
}
}
लेकिन बात करने के लिए और अधिक, दोनों Func<string,string>
और delegate string convertMethod(string)
एक ही विधि परिभाषाओं कि क्या वे तरीकों, गुमनाम तरीकों, या लैम्ब्डा भाव होना पकड़े करने में सक्षम हो जाएगा।
जिसके लिए आपको उपयोग करना चाहिए, स्थिति पर निर्भर करता है। यदि आप चाहते हैं कि आपके प्रतिनिधि को अधिक परिभाषित किया जाए कि वह क्या लेता है और वापस लौटता है, तो सामान्य प्रतिनिधि परिपूर्ण हैं। यदि आप चाहते हैं कि प्रतिनिधि का कुछ विशेष नाम हो, जो उस प्रतिनिधि को क्या करना चाहिए (परिभाषा से परे Action
, सरल होना चाहिए) की अधिक परिभाषा देता है , Predicate
तो अपना स्वयं का प्रतिनिधि बनाना हमेशा एक विकल्प होता है।