Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Func Delegate Tanıyalım

Yazar: Cengiz Atilla

Kategori: C#.NET

Eklenme Tarihi: 07.01.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

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
Visual Studio 2010 Beta 2'yi denediniz mi?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.