using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//delegate metotların referansıdır.
//event
//bşir olay gerçekleştiğinde birden fazla fonksiyonu çağırmak isteyebilirsiniz.
//bir olayı birden fazla yere bildirmekte kullanılır.
//bir olay olduğunda delegate metodu çağrılır.
//delegate metodunu kendine ekleyen her metot otomatik olarak çağrılır.
//public delegate void foo();
//foo x = new foo(test);
//public void test() Console.WriteLine(“Tamam”);
namespace ConsoleApplication1
{
/* DelegateTest adında bir sınıf oluşturun.
* sınıfın yapıcı metodunda ok1,ok2 ve ok3 metotlarını delegate eklenmesini sağlayın.
* kullanıcının girdiği herhangi bir sayıyı delegate ile işlemlerini gerçekleştirin.
*/
//delegateleri bir metot listesi olarak düşünebilirsiniz. aynı özelliğe sahip metotların bir araya geldiği ve girilen parametrenin hepsini etkilemesini sğalayan yapılardır.
class DelegateTest
{
public delegate void testDelegate(int a);//her yerden ulaşılabilir türde(public) geriye değer döndürmeyen(void) tam sayı tipinde tek bir parametre alan tüm metotlar için delegate tanımlanmıştır.
public DelegateTest()//sınıfın yapıcı metodu
{
testDelegate td = new testDelegate(ok1);//delegate nesnesi oluşturuldu ve ilk değer olarak ok1 metodu eklendi
td += new testDelegate(ok2);//ok2 eklendi
td += new testDelegate(ok3);//ok3 eklendi
string i = Console.ReadLine();//kullanıcıdan bir sayı istendi
td(Convert.ToInt32(i));//girilen sayıyı td nin tek parametreli tüm metotlarında uygulandı ve işlemler gerçekleşti.
}
public void ok1(int i)
{
Console.WriteLine(i + ” değeri”);
}
public void ok2(int i)
{
Console.WriteLine(i + ” değeri”);
}
public void ok3(int i)
{
Console.WriteLine(i + ” değeri”);
}
}
class Program
{
static void Main(string[] args)
{
new DelegateTest();//DelegateTest sınıfına ulaşıldı.
}
}
}