9 Eylül 2015

Delegates 2

Bir method çalışma zamanında bir delagete ye atanabilir. Bu durum plug-in methodlar oluşturmada kullanışlıdır.
Bu örnekte  Donusum adında bir metodumuzu bir integer dizisinin her bir elemanında uygulamayı görelim. Bu dönüşüm için aşağıdaki gibi bir delegate oluşturalım.

public delegate int Donusturucu (int x);


 Aşağıdaki  Islemler klasımıza Donusum adında bir plug-in  method tanımladık. Parametre olarak delegate kullandık.

 class Islemler
{
  public static void Donusum(int[ ] degerler, Donusturucu d)
  {
      for (int i = 0; i < degerler.Length; i++)
      
degerler[i] = d(degerler[i]);
  }


Burada püf nokta metodumuzun içerisinde metodları parametre olarak kullanabiliyor olmamız.

Aşağıda örneğin tamamını incelersek daha iyi anlayacağız.

using System;

namespace Delegates1
{
    public delegate int Donusturucu(int x);
    class Islemler
    {
        public static void Donusum(int[] degerler, Donusturucu d)
        {
            for (int i = 0; i < degerler.Length; i++)
                degerler[i] = d(degerler[i]);
        }
    }
    class Program
    {
        static int Kare(int x) { return x * x; }
        static int Kup(int x) { return x * x * x; }
        static void Main(string[] args)
        {
            int[] degerler = { 1, 2, 3 };
            Islemler.Donusum(degerler, Kare); // Delegate sayesinde metodumuzu parametre gibi kullanabildik.
            //Islemler.Donusum(degerler, Kup); // Delegate sayesinde metodumuzu parametre gibi kullanabildik.
            foreach (int i in degerler)
                Console.Write(i + " "); // 1 4 9

            Console.ReadKey();
        }
    }
}