Aracılığıyla paylaş


Adsýz yöntemler (C# Programlama Kılavuzu)

Sürümlerinde C# 2.0, tek yolu bildirmek için önce bir temsilci kullanılacak olan yöntemleri adlı.C# 2.0 Adsýz yöntemler kullanılmaya başlandı ve lambda ifadeleri, C# 3.0 ve sonraki satır içi kod yazmak için tercih edilen yolu Adsýz yöntemler yerini.Ancak, bu konudaki Adsýz yöntemler hakkında bilgi lambda ifadeleri için de geçerlidir.Adsýz bir yöntem lambda ifadelerde bulunamadı işlevsellik sağlayan bir durum yoktur.Adsız yöntem parametre listesi atlamak etkinleştirin.Başka bir deyişle, Adsýz bir yöntem imzaları çeşitli Temsilciler için dönüştürülebilir.Bu lambda ifadeleri ile mümkün değildir.Özellikle lambda ifadeleri hakkında daha fazla bilgi için bkz: Lambda ifadeleri (C# Programlama Kılavuzu).

Adsız yöntem oluşturma kod bloğunu temsilci parametre olarak geçirmek için aslında bir yoludur.Aşağıda iki örnek verilmiştir:

// Create a handler for a click event.
button1.Click += delegate(System.Object o, System.EventArgs e)
                   { System.Windows.Forms.MessageBox.Show("Click!"); };
// Create a delegate.
delegate void Del(int x);

// Instantiate the delegate using an anonymous method.
Del d = delegate(int k) { /* ... */ };

Adsýz yöntemler kullanarak yükü ayrı bir yöntem oluşturmak zorunda değilsiniz çünkü Temsilciler başlatmasını kodlama azaltın.

Örneğin, kod bloğunun bir temsilci yerine bir yöntem oluşturmak zorunda kalmadan, bir durumda yararlı olabilir belirten gereksiz bir ek yük görünebilir.Yeni bir iş parçacığı başlatma sırasında iyi bir örnek olabilir.Bu sınıf, bir iş parçacığı oluşturur ve ayrıca ek bir yöntem için temsilci oluşturmadan iş parçacığı yürütülen kod içerir.

void StartThread()
{
    System.Threading.Thread t1 = new System.Threading.Thread
      (delegate()
            {
                System.Console.Write("Hello, ");
                System.Console.WriteLine("World!");
            });
    t1.Start();
}

Notlar

Adsýz bir yöntem parametrelerinin kapsamı yöntem bloğu anonim.

Gibi bir atlama ifadesi için bir hata olduğunu goto, sonu, veya devam, hedef blok dışında ise adsız yöntem bloğu içinde.Gibi bir atlama ifadesi için bir hata olduğu goto, break, veya continue, hedef blok içinde ise adsız yöntem bloğu dışında.

Yerel değişkenleri ve parametreleri kapsamını içeren bir adsız yöntem bildirimi adlı dış adsız yöntem değişkenler.Örneğin, aşağıdaki kod kesimi, n bir dış değişkeni:

int n = 0;
Del d = delegate() { System.Console.WriteLine("Copy #:{0}", ++n); };

Dış değişkenin başvurusu n söylenir Yakalanan temsilci oluşturulduğunda.Adsýz yöntemler başvuru Temsilciler çöp toplama işlemi için uygun hale gelene kadar yerel değişkenlerin yakalanan değişken ömrü uzatır.

Adsýz bir yöntem erişemiyor ref veya dışarı dış bir kapsam parametreleri.

Güvenli olmayan bir kod içinde erişilen yöntem bloğu anonim.

Adsýz yöntemler sol tarafında verilmez olan işleci.

Örnek

Bir temsilci başlatmasını iki yolu aşağıdaki örnekte gösterilmiştir:

  • Temsilci Adsýz bir yöntem ile ilişkilendirme.

  • Temsilci adlandırılmış yöntemi ile ilişkilendirerek (DoWork).

Her durumda, temsilci çağrıldığında bir ileti görüntülenir.

// Declare a delegate.
delegate void Printer(string s);

class TestClass
{
    static void Main()
    {
        // Instatiate the delegate type using an anonymous method.
        Printer p = delegate(string j)
        {
            System.Console.WriteLine(j);
        };

        // Results from the anonymous delegate call.
        p("The delegate using the anonymous method is called.");

        // The delegate instantiation using a named method "DoWork".
        p = new Printer(TestClass.DoWork);

        // Results from the old style delegate call.
        p("The delegate using the named method is called.");
    }

    // The method associated with the named delegate.
    static void DoWork(string k)
    {
        System.Console.WriteLine(k);
    }
}
/* Output:
    The delegate using the anonymous method is called.
    The delegate using the named method is called.
*/

Ayrıca bkz.

Başvuru

Temsilciler (C# Programlama Kılavuzu)

Lambda ifadeleri (C# Programlama Kılavuzu)

Güvenli olmayan kod ve işaretçileri (C# Programlama Kılavuzu)

Yöntemleri (C# Programlama Kılavuzu)

Temsilci adı vs. Adsýz yöntemler (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu