Skip to content

Instantly share code, notes, and snippets.

@savolla
Created January 3, 2020 09:15
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/0d969e5fae2bd8d87883929d90c0b509 to your computer and use it in GitHub Desktop.
Save savolla/0d969e5fae2bd8d87883929d90c0b509 to your computer and use it in GitHub Desktop.
c#'da delege nedir ANLAMA GARANTİLİ :P
// Delege nedir ve nasıl kullanılır
/*
delege, bir ya da daha çok fonksiyonu aynı anda çalıştırmaya yarar.
delegeyle 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 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)
---- ----------------
| `-> benzer fonksiyonların alacağı parametreler
`-> benzer fonksiyonların döndürdüğü değerler
delege tanımlanırken, sonradan içine konulacak 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.. 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
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 bir test sürüşü yapalım
static void Main()
{
// delegeyi kullanmak için yukarıda global olan delegenin
// nesnesini oluşturuyoruz. static denedim ama olmadı.. sanırım
// c#'da static delegelere izin yok (?)
MyDlg d = new MyDlg(add); // parametre olarak ilk fonksiyonu verdik
d += substract; // data sonra delegeye substracti ve diğerlerini ekledik
d += multiply; // += işareti aritmetik toplama için değil, fonksiyonları listeye eklemek için
d += divide;
// delegenin ilk nesnesini oluşturduğumuzda, parametresine bir fonksiyon eklememiz gerekiyor
// sonradan += ile eklememiz lazım. MyDlg(add, substract, multiply, divide) olaydı daya iyidi...
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ü:
/*
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