SORU
1 EYLÜL 2014, PAZARTESİ


Neden bazı C# ifadeleri statik yöntemler için derleme lambda?

Kodu aşağıda gördüğünüz gibi, bir değişken olarak Action<> bir nesne olarak atadım.

Kimse bana bu eylem yöntemi temsilci davranır neden statik bir yöntem gibi mi lütfen?

Neden aşağıdaki kod true iade ediyor mu?

Kod:

public static void Main(string[] args)
{
    Action<string> actionMethod = s => { Console.WriteLine("My Name is "   s); };

    Console.WriteLine(actionMethod.Method.IsStatic);

    Console.Read();
}

Çıkış:

example output of sample

CEVAP
1 EYLÜL 2014, PAZARTESİ


Bu, örneğin: kilitler vardır hayır, çünkü büyük olasılıkla

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);

Bu withClosure withoutClosure true false çıktı.

Lambda ifadesi kullandığınızda, derleyici yöntemi içeren küçük bir sınıf oluşturur, bu aşağıdaki gibi bir şey (gerçek uygulama büyük olasılıkla biraz değişir) derleme:

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> elde edilen örnekler aslında bu oluşturulan sınıfları, yöntemleri işaret görebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • TomOdellVEVO

    TomOdellVEVO

    29 Mayıs 2012