İleri C# uygulamaları

Bu örneğimizde Polymorphism, Lambda Expressions ve factory pattern i ni bir arada görebilirsiniz.

Sizinle, C#'ın gücünü göstermek amacıyla yazdığım örnek uygulamayı paylaşmak istiyorum.

Kodu inceleyecek olursanız iki adet classımız var ikisi de IslemTip interface ini implement ediyor.

Örneğimizde, Lambda Expressions ve Polymorphism birlikte kullanılmıştır.

interface IslemTip
{
    int Islem(int a, int c);
}

class Topla : IslemTip
{
    public int Islem(int a, int b)
    {
        return a + b;
    }
}

class Cikart : IslemTip
{
    public int Islem(int a, int b)
    {
        return a - b;
    }
}

class Program
{
    static void Main(string[] args)
    {
       Func<int, int, IslemTip, int> f =
            (a, b, t) => t.Islem(a, b);

        Console.WriteLine(f(3, 4, new Topla()));
        Console.WriteLine(f(3, 4, new Cikart()));
    }
}

Eskiden delegate tanımlarken standart yazım şeklini kullanırdık:

delegate int IslemTipHandler(int a, int b, IslemTip islem);

static int DelegateCalistir(int a, int b, IslemTip islem)
{
    return islem.Islem(a, b);
}

static void Main(string[] args)
{
    IslemTipHandler ith = new IslemTipHandler(DelegateCalistir);
    Console.WriteLine(ith.Invoke(3, 4, new Topla()));
    Console.WriteLine(ith.Invoke(3, 4, new Cikart()));
}

Şimdilerde delegate tanımlama işlemini Func ile çok daha rahat yapabiliyoruz.

Örneğimizde de göreceğiniz üzere delegate e vereceğimiz 3 adet parametrenin tipini ve son olarak da dönüş tipini tanımlıyoruz.

delegate 1

Örneğimizde "new Topla()" /  "new Cikart" demek çok hoş değil biliyorum, bunun yerine factory paternini uygulayabilirdik.

Hatta uygulayabilirdik demeyelim uygulayalım:

abstract class IslemTip
{
    public abstract int Islem(int a, int b);

    public static IslemTip Olustur(string s)
    {
        if (s == "Topla") return new Topla();
        else if (s == "Cikart") return new Cikart();
        return null;
    }
}

class Topla : IslemTip
{

    public override int Islem(int a, int b)
    {
        return a + b;
    }
}

class Cikart : IslemTip
{
    public override int Islem(int a, int b)
    {
        return a - b;
    }
}

class Program
{

    static void Main(string[] args)
    {
      Func<int, int, string, int> f =
            (a, b, t) => IslemTip.Olustur(t).Islem(a, b);

        Console.WriteLine(f(3, 4, "Topla"));
        Console.WriteLine(f(3, 4, "Cikart"));
    }
}

Böylece programımız çok daha esnek bir hâl almış oldu. Sizce de bunlarla uğraşması zevkli değil mi?

Umarım .net e yeni başlayan arkadaşlara yeni ufuklar açabilmişimdir.