Skip to content

Instantly share code, notes, and snippets.

@savolla
Last active September 15, 2020 10:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save savolla/1a67ee1652a2b88b1a9bfdceb0d284b9 to your computer and use it in GitHub Desktop.
Save savolla/1a67ee1652a2b88b1a9bfdceb0d284b9 to your computer and use it in GitHub Desktop.
c#'da delege nedir ANLAMA GARANTİLİ :P
// C#^da Delege nedir ve nasıl kullanılır
/*
delege, bir ya da daha çok fonksiyonu aynı anda çalıştırmaya yarar.
delege yardımıyla aynı anda çalıştırılacak olan fonksiyonlar,
aynı tip dödürmeli ve aynı türden parametre almalıdır.
aşağıdaki fonksiyonlar, delege ile aynı anda çalıştırılabilirler çünkü
return tipleri aynı(int) ve aldığı parametreler de aynı sayıda ve aynı tipte
int topla(int x, double y)
int cıkar(int x, double y)
bunlar ise çalıştırılamazlar çünkü parametre ya da return değerleri farklı
void topla(int x, double y)
String sayHi(String message)
*/
using System;
// her yerden erişilsin diye global bir delege tanımladık
/*
delege keywordü
/ delegenin adı. isteğe göre değişebilir
/ /
delegate void MyDlg(double p1, double2)
\ \
\ aynı anda çalıştırılacak olan fonksiyonların alacağı parametreler
aynı anda çalıştırılacak olan fonksiyonların döndürdüğü değerler
delege tanımlanırken, aynı anda çalışacak olan fonksiyonların, return değerleri
ve parametre değerlerini belirtmek zorundayız.
*/
delegate void MyDlg(double p1, double p2);
class MyClass
{
// diyelim ki toplama çıkarma çarpma ve bölme fonksiyonları yazdık.
// 45 ve 5 değerlerinin toplamını, farkını, çarpımını ve bölümünü
// istiyoruz. normal koşullarda bu fonksiyonları teker teker çağırmamız
// gerekir değil mi?.. bunun yerine bu fonksiyonları tek bir fonksiyona koysak ve ordan
// parametre ile çalıştırsak? yok.. c# bunun için daha iyi(?) bir yöntem sunmuş
// D E L E G A T E !!!
// aşağıda toplama, çıkarma, çarpma ve bölme fonksiyonları
// tanımlanmıştır. static olmaları, hiç class objesi oluşturmadan
// erişilmeleri içindir (kolaylık olsun diye)
// hepsinin return değerleri void ve iki int tipinden parametre almışlar (delegate ile kullanılabilir)
static void add(double p1, double p2) // toplama
{
Console.WriteLine(p1 + p2);
}
static void substract(double p1, double p2) // çıkarma
{
Console.WriteLine(p1 - p2);
}
static void multiply(double p1, double p2) // çarpma
{
Console.WriteLine(p1 * p2);
}
static void divide(double p1, double p2) // bölme
{
Console.WriteLine(p1 / p2);
}
// şimdi bu fonksiyonları tekte çalıştıralım!
static void Main()
{
// 4'ünü tekte çalıştırmak için yukarıda global olan delegenin
// nesnesini oluşturuyoruz. static denedim ama olmadı.. sanırım
// c#'da static delegelere izin yok (?)
// aşağıda aslında yapılmaya çalışılan:
// MyDlg d = new MyDlg(add, substract, multiply, divide)
// ama yok.. zorlaştıralım ki kodu anlamayamyalım..
MyDlg d = new MyDlg(add); // parametre olarak ilk fonksiyonu verdik
d += substract; // daha sonra delegeye substracti ve diğer fonksiyonları += ile ekledik
d += multiply; // += işareti aritmetik toplama için değil, fonksiyonları listeye eklemek için..
d += divide;
d(43, 2);
// oluşturduğumuz bu delege (d), yukarıdaki 4 fonksiyonu da içinde tuttuğu için
// verilen parametreleri alıp o 4 fonksiyona tek seferde verip tek seferde ÇAT! diye çalıştırır
}
}
// deep not: delegelere asla ihtiyacımız yok çünkü aynı anda çalıştırmak istediğimiz
// bütün fonksiyonları bir fonksiyon içine yazıp çalıştırabiliriz. aşağıdaki gibi..
/*
static void operations(double p1, double p2)
{
add(p1, p2);
substract(p1, p2);
multiply(p1, p2);
divide(p1, p2);
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment