Func Delegate Tanıyalım

Yazar: Cengiz Atilla
Kategori: C#.NET & VB.NET
Eklenme Tarihi: 7.1.2010 10:34:13



Merhaba Arkadaşlar ; Bugunku makalemizde linq sorgularımızı yazar iken karsımıza cıkan delegate lerden biri olan func delegate sini inceleyecegiz. Func delegate si delegate den kalıtılmış generic bir delegate dir . Parametre olarak < T > tipi alır geriye < T > tipi dondurur .

 

Code tarafına gecelim .

 Ilk once uzerinde işlem yapıcagımız ogrenci tipimizi olusturalım ...

ogrenci.cs

class Ogrenci
    {
        public int Ogrenciid { get; set; }
        public string OgrenciAdi { get; set; }
        public string OgrenciSoyad { get; set; }
        public int Not1 { get; set; }
        public int Not2 { get; set; }
        public int Not3 { get; set; }

        public override string ToString()
        {
            return string.Format("Ogrenci ID {0} Adı {1} Soyad {2} Not1 {3} Not2 {4} Not3 {5}", Ogrenciid, OgrenciAdi, OgrenciSoyad, Not1, Not2, Not3);
        }
    }

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace FuncDelegateInceleme
{
    class Program
    {
        static void Main(string[] args)
        {
            // Bir adet func delegate tanımlayalım bu delegate miz bizden ogrenci tipi alsın double olarak o ogrencinin bize ortalamasını dondursun ....
    
            // I.Yol.

            /* I.Yolda ilgili func delegate mizin bizden istedigi metotu biz dısarıda olusturup verdik ortalamahesapla adındaki metotumuzu belirttik ve daha sonra bize donen degeri double uzerine aldık ve ekrana yazdırdık ...  */
            Func<Ogrenci, double> OgrenciNotOrtalamasiI = new Func<Ogrenci, double>(OrtalamaHesapla);
            double GelenOrtalamaI = OgrenciNotOrtalamasiI(new Ogrenci()
            {
                Ogrenciid = 1,
                OgrenciAdi = "Cengiz",
                OgrenciSoyad = "ATİLLA",
                Not1 = 50,
                Not2 = 60,
                Not3 = 70,
            });

            Console.WriteLine("Ogrencinin Ortalamasi {0}", GelenOrtalamaI);

            // II.Yol
            /* Ikinci olan bu yolumuzda ise func delegate mizin bizden istedigi metot u isimsiz metot larımızı kullanarak verelim ...
             */
            Func<Ogrenci, double> OgrenciNotOrtalamasiII = new Func<Ogrenci, double>(delegate(Ogrenci o)
                {
                    return (o.Not1 + o.Not2 + o.Not3) / 3;
                });
            double GelenOrtalamaII = OgrenciNotOrtalamasiII(new Ogrenci()
            {
                Ogrenciid = 1,
                OgrenciAdi = "Oguz",
                OgrenciSoyad = "BABA",
                Not1 = 50,
                Not2 = 50,
                Not3 = 70
            });

            Console.WriteLine("Ogrencinin Ortalamasi İsimsiz Metot ile {0}", GelenOrtalamaII);

            // func delegate mizin işaret ettigi metotları bulalım ...
            Console.WriteLine("Func delegemizin işaret ettigi metotlar aşagıdaki gibidir ... ");
            foreach (Delegate item in OgrenciNotOrtalamasiI.GetInvocationList())
            {

                Console.WriteLine(item.Method.Name);

                // func delegatemizin işaret ettigi metotumuz bizden istedigi parametreleri ogrenmek icin ise
                foreach (ParameterInfo parametresi in item.Method.GetParameters())
                {
                    // item.Method.GetParameters() metotumuz bize ParameterInfo[] şeklinde dönmektedir . ilgili bu tipi kullanmak icin  System.Reflection using etmemiz gerekir . daha sonra metotlarımızın istedigi parametreleride bu sekilde gorebiliriz ...
                    Console.WriteLine("Parametre adı {0} - Tipi {1}", parametresi.Name, parametresi.ParameterType);
                }
            }

           


        }

        static double OrtalamaHesapla(Ogrenci o)
        {
            return (o.Not1 + o.Not2 + o.Not3) / 3;
        }
      
    }
}

Func delegate lerimizi ozellikle linq  sorgularımız yazar iken yogun bi sekilde kullanıcagız ...

.Net le kalın


Cengiz Atilla

Cengiz Atilla 02.11.1984 / İstanbul doğumludur . Nahit Menteşe Endüstri Meslek Lisesi Programcılık bölümünden mezun olmuştur .  2 yıllık Bursa Uludağ Unv Bilgisayar Programcılığı bölümünü bitirmiştir .

MCPD ve MCT ünvanlarına sahiptir.

atilla@cengizatilla.com
cengiz.atilla@hotmail.com
www.cengizatilla.com

Bu makaleye ilk yorum yapan siz olun.

Yorumunuz