C# Anonim (Anonymous) Metot

Anonim metot, C# 2.0’da tanıtılan herhangi bir ad içermeyen bir metot tipidir. Kullanıcı satır içi bir metot oluşturmak istediğinde kullanışlıdır. Ayrıca diğer metotlar gibi anonim metotlarda parametreli bir şekilde kullanılabilir.

Anonim bir metot, delege anahtar sözcüğü kullanılarak tanımlanır ve kullanıcı bu metodu delegate türündeki bir değişkene atayabilir.

Sözdizimi (Syntax):

delegate(parameter_list){
    // Code..
};

Örnek:

internal class Program
{
    public delegate void mevsimler(string mevsim);
    private static void Main(string[] args)
    {
        // Anonim metot
        mevsimler p = delegate (string favorimevsim)
        {
            Console.WriteLine("Benim favori mevsimimim: " + favorimevsim);
        };
        p("Ilkbahar");
    }
}

Sonuç:

Benim favori mevsimimim: Ilkbahar

Önemli Noktalar:

  • Bu metod aynı zamanda satır içi temsilci (inline delegate) olarak da bilinir.
  • Bu metodu kullanarak, ayrı metotlar yazmadan bir temsilci nesnesi (delegate object) oluşturabilirsiniz.
  • Bu metot, dış metotda bulunan değişkene erişebilir. Bu tür değişkenler, Dış değişkenler olarak bilinir. Aşağıdaki örnekte gösterildiği gibi fav dış değişkendir.

Örnek:

internal class Program
{
    public delegate void mevsimler(string mevsim);
    private static void Main(string[] args)
    {
        string fav = "Yaz";

        // Anonim metot
        mevsimler p = delegate (string favorimevsim)
        {
            Console.WriteLine("Benim favori mevsimimim: " + favorimevsim);

            // Dış değişkene buradan erişim yapılabilir.
            Console.WriteLine("Ayrınca {0} mevsiminide çok severim.", fav);
        };
        p("Ilkbahar");
    }
}

Sonuç:

Benim favori mevsimimim: Ilkbahar
Ayrınca Yaz mevsiminide çok severim.

Bu metodu, delegate parametre olarak kabul eden başka bir metoda geçirebilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

internal class Program
{
    public delegate void mevsimler(string x);

    public static void Tanimla(mevsimler mevsim, string mevsimim)
    {
        mevsimim = "Bahar " + mevsimim;
        mevsim(mevsimim);
    }
    private static void Main(string[] args)
    {
        Tanimla(delegate (string mevsimim) 
        {
            Console.WriteLine("Favori Mevsimim: " + mevsimim);
        }, "Yaz");
    }
}

Sonuç:

Favori Mevsimim: Bahar Yaz
  • Anonim metotlarda, parametre listesini kaldırmanıza izin verilir, bu da anonim bir metodu temsilciye (delegate) dönüştürebileceğiniz anlamına gelir.
  • Anonim metot bloğu, anonim metotta ki parametrelerin kapsamı anlamına gelir.
  • Anonim bir metot, goto, break, continue. gibi atlama ifadeleri içermez.
  • Anonim bir metot, dış kapsamın in, ref ve out parametrelerine erişmez.
  • Anonim bir metodu event handler (olay işleyici) olarak da kullanabilirsiniz.
MyButton.Click += delegate(Object obj, EventArgs ev)
{
    System.Windows.Forms.MessageBox.Show("Hatasız tamamlayın...");
}