यह सबसे अधिक संभावना है क्योंकि कोई क्लोजर नहीं हैं, उदाहरण के लिए:
int age = 25;
Action<string> withClosure = s => Console.WriteLine("My name is {0} and I am {1} years old", s, age);
Action<string> withoutClosure = s => Console.WriteLine("My name is {0}", s);
Console.WriteLine(withClosure.Method.IsStatic);
Console.WriteLine(withoutClosure.Method.IsStatic);
हो जाएगा ताकि उत्पादन false
के लिए withClosure
और true
के लिएwithoutClosure
।
जब आप लैम्बडा एक्सप्रेशन का उपयोग करते हैं, तो कंपाइलर आपकी विधि को शामिल करने के लिए एक छोटा वर्ग बनाता है, यह कुछ इस तरह से संकलन करेगा (वास्तविक कार्यान्वयन सबसे अधिक संभावना है कि थोड़ा भिन्न होता है):
private class <Main>b__0
{
public int age;
public void withClosure(string s)
{
Console.WriteLine("My name is {0} and I am {1} years old", s, age)
}
}
private static class <Main>b__1
{
public static void withoutClosure(string s)
{
Console.WriteLine("My name is {0}", s)
}
}
public static void Main()
{
var b__0 = new <Main>b__0();
b__0.age = 25;
Action<string> withClosure = b__0.withClosure;
Action<string> withoutClosure = <Main>b__1.withoutClosure;
Console.WriteLine(withClosure.Method.IsStatic);
Console.WriteLine(withoutClosure.Method.IsStatic);
}
आप परिणामी Action<string>
उदाहरणों को वास्तव में इन उत्पन्न वर्गों के तरीकों की ओर देख सकते हैं ।
static
तरीकों के लिए एकदम सही उम्मीदवार हैं ।