HoşGeldin Ziyretçi, Lütfen Giriş Yap ya da Üye Ol
Ip Adresiniz: 38.107.179.243
Username:
Password:

Sayfa: [1]   Aşağı git
Bu Konuyu Gönder Yazdır
Gönderen Konu: C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı  (Okunma Sayısı 288 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
MuratbanK'in HacKbanK Bilgileri
MuratbanK
кαяαηℓιктαкi göякєmℓi ιşιğιηιz
¼ ™ ѕιтє кυяυ©υѕυ © ¾
ωєвмαѕтєя üує
*


HacKbanK lıya Ozgu Mesajı ™ кαяαmuяαтвαηк © тєкєℓуєηιяαкı=нαуαт ρєєн

Cinsiyeti Bay
Uye Numarası (ID) 1
HacKbanK a Kayıt Tarihi Temmuz 13, 2007, 04:26:51 ÖS
Nerden тєкєℓуєηιяαкıηıη σℓ∂υgυ нєянαηgι вιя çιℓιηgιя ѕσƒяαѕıη∂αη
HacKbanKlının Yası: 30
HacKbanK taki Mesaj Sayısı 22317
HacKbanK Rep Puanı
Rep Puanı: 19748
Deneyimleri

Aktiflik

Deneyim
Seviye
HıyarlıK
HacKbanK Tecrubeleri

Paylasım

Guc/Power
Ukalalık
Tehlike Duzeyi
Iletisim Bilgileri
Üyelik Bilgileri Çevrimiçi Ruh Halim:
« : Mayıs 24, 2009, 12:28:19 ÖÖ »

C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı

Bu yazımda sizlere C#?ta delegate(delege veya elçi) ve event(olay) kavramlarından bahsedeceğim ve elbette bunları kullanmanın yararlarını anlatacağım. Kuşkusuz .Net Framework ile birlikte gelen en büyük yeniliklerden biri delege ve event kullanımıdır. Bu yanı ile .Net Framework   diğer uygulama geliştirme ortamlarının  bir kısmından daha üstün niteliklere sahip olmaktadır. Şimdi delege nedir biraz ondan bahsedelim. Delege basit anlamda düşünürsek aracılık yapandır. Burada ise delege aracılık yapan metod olarak karşımıza çıkar. Yani başka bir metodun tetiklenmesine yardım eden metottur. Bu sayede metodların tetiklenmesi dinamik olarak gerçekleşir. Olay(event) ise her zaman ?belki farkında olmadan? kullandığımız kontroller gibidir. Yalnız delege ile olay arasındaki fark delegelerin "invoke" edilmesi olayların ise "raise" edilmesidir. Daha basit olarak ifade edersek olaylar delegelerin özel bir halidir. Delegeler olmadan olayların bir anlamı yoktur. Aslında bir örnekle bunların nasıl kullanıldığını açıklarsam daha iyi anlaşılacaktır. Şimdi çayın kaynamasını düşünün. Çay kaynadığı anda haberdar olmak istiyoruz ancak çayın başında da beklemek istemiyoruz. Bu yüzden bizi haberdar edecek zil çalma metodunu çayın kaynama metoduna bağlıyoruz. Ve çay kaynadığı anda zil çalma metodu da otomatik olarak tetiklenmiş oluyor. Delege ile olayın implementasyonunu aşağıda göstereceğim ve bunlarla ilgili bir program de koyarak anlaşılmasını kolaylaştıracağım. Çünkü bazen programlarla anlatmak istediklerimizi daha iyi anlatırız.

I.   Olayın(event) yapılışı: Mouse?ın tıklanması, form üzerindeki bir tuşa basılması, form üzerindeki bir linkin tıklanması vs? bunların hepsi birer olaydır aslında. Şimdi mouse tıklanması ile ilgili bir kodu inceleyelim:

private void FareTikla()
{
    // Buraya mouse?un sol tıklanması durumunda yapılması gereken

    // işlemler gelecek.
}

// Burada fareye sol tıklandığı zaman çalışacak olan metodu bağlıyoruz. Bu işlemi de doğal olarak delegelerle yapıyoruz. Buradaki '+=' operatörüne dikkat ettiniz mi? Bu '+=' operatörü fareye sol tıklanması olayı karşısında raise edilecek eventi bağlamamıza yarıyor.

Mouse.MouseClicked += new MouseClickedEventHandler(FareTikla);

// Şimdi de fare sol tıklandığı zaman çalışacak olan metodu devreden çıkarıyoruz. Bu sayede fare sol tıklandığı zaman hiç bir metot //devreye girmeyecektir. Yani farenin sol tıklanmasına herhangi bir tepki verilmeyecektir.

Mouse.MouseClicked -= new MouseClickedEventHandler(FareTikla);


II.    Delegenin yapılışı: Delege kullanılacağı zaman tek başına da kullanılabildiği gibi olaylara bağlanarak da kullanılabilmektedir. Bu yüzden  ilk önce olayı(event) anlarsak delegenin anlaşılması daha da kolaylaşacaktır. Şimdi basit bir delege nasıl tanımlanır ona bakalım.

// Tanımladığımız delege double tipinde parametre alıyor

// ve int tipinde değer döndürüyor.

public delegate int myDelegate(double D);

// Delegenin temsil edeceği metodu yazalım.

public int ReturnInt(double D)

{   

//Buraya metod çalışınca yapılması gerekecek olan kod gelecek

}

// Şimdi de delegenin bir örneğini yaratalım.

public void amethod(
{

myDelegate aDelegate = new myDelegate(ReturnInt);

}

//Şimdi de delegenin temsil ettiği metodun nasıl çalıştırılacağını sağlayan kodu yazalım.

aDelegate(3333);

Şimdi bu delege ve olay yapısı bizim ne işimize yarayacak derseniz; Şöyle bir senaryo üretelim: Birden fazla formda aynı anda çalıştığımızı ve bu formların da birbirinin aynı olduğunu düşünelim(şekilsel olarak tabii ki) ve bu formlardan herhangi birinin üzerindeki bir tuşa basıldığı zaman bütün formlarda hangi formun tıklandığına dair bir yazı yazmasını isteyelim.

Bunu eğer uzun yoldan yapmak isterseniz tek tek bütün formlar içinde birer tane değişken tanımlayıp onu kontrol etmeniz gerekirdi. Sonra da tek tek diğer formlara mesaj gönderilmesini sağlamak gerekirdi. Bu şekilde yapmak uzun ve zahmetli bir iş olurdu.

İkinci yöntem ise delege(temsilci) yapısını kullanmaktır. Şimdi her formumuz için bir tane forma mesaj yazacak olan bir metod olmalı ve bu metod hangi formdaki yazdırma tuşunun tetiklendiğini belirtmek için bir tane de parametre almalı. Şimdi de yukarıda anlattığımız senaryonun kodunu inceleyelim.

Ana formumuz içinde tanımladığımız delege ve olay yapısına bakalım. Burada delegemiz tamsayı(int) bir parametre alıyor. Bu parametre sayesinde hangi formdaki tuşa basılarak bu delegenin harekete geçirildiğini anlayabileceğiz. Olayımıza bakacak olursak olayımızın bir üst satırda tanımlanan delege tipinde olduğunu görebiliriz.

sayac değişkeni ise forma numara vermek için tanımlanmış bir değişken oluyor.

private int sayac = 0;

public delegate void userDelegate(int formNo);

public event userDelegate userEvent;

Yeni form oluşturma tuşuna basılınca ise yeni form oluşturulacak ve bu formun içindeki etikete yazma metodu olaya eklenecek.

sayac = sayac+1;       

FrmUser frmUser=new FrmUser(sayac,this);

this.userEvent += new userDelegate(frmUser.writeFormNo);

Olaylara doğrudan başka sınıflar altından erişilebilse de bu yöntem pek doğru bir yol olmayacağı için olayımızı bir metodun içinde kamufle ederek kullanıyoruz. O yüzden olayımızı metodTetikle adında bir metodun içinde kamufle ederek kullanıyoruz. Başka bir formdan içinden bu metod çağrıldığı an otomatik olarak olayımızı tetikleyip bütün formlara(ana formumuz hariç) hangi formdan tuşa baıldığını yazacak.

public void metodTetikle(int formNo)
{
userEvent(formNo);
}

Bir de şimdi olaydan belli bir delegenin çıkarılması işlemi var değil mi? Öyle ya yaratılan formlardan bir tanesi kapatılırsa yazdırma metodunun tetiklenmesi istisna?ya (exception) yol açar. Bu yüzden bu formun metodunun listeden çıkarılması gerekir. Aşağıdaki kod bu işi yaparak bizi istenmeyen hatalardan korumuş olur.

public void elemanCikart(FrmUser frmUser)
{
this.userEvent -= new userDelegate(frmUser.writeFormNo);
}

Yukarıdaki kodun tamamı ana formumuz içinde yer alan kodlardı. Şimdi de ana formda tuşa basılınca oluşturulan formun içinde koda bakalım.

Formlara yazı yazdırmak için tuşa bastığımızda ana formumuzdaki metodTetikle metodunu çağırarak olayın tetiklenmesini sağlıyoruz.

private void btnActive_Click(object sender, System.EventArgs e)

{

form1.metodTetikle(formNo);

}

Ancak her formun içinde forma mesajı yazacak olan kısım aşağıdaki metoddakigibidir. Şimdi diyeceksiniz, niye aynı form içindeki metodu başka bir formu kullanarak çağırıyorsunuz. Ama buradaki fark ekrana mesaj yazacak olan form sayısının bir tane olmamasıdır. N tane forma aynı anda mesaj yazdırmak istediğimiz için bir başka sınıfta veya formda tanımlanmış olan bir olayı tetikleyerek bu işi yapıyoruz. Aksi halde N tane formu tek tek dolaşmamız gerekirdi. Bu ise performans kaybına yol açtığı gibi daha büyük programlarda kod karmaşasına yol açabilmektedir. 

public void writeFormNo(int tetiklenenNo)
{
lblAciklama.Text="Tuşa Basılan Form Numarası:"+tetiklenenNo;
}

Galiba bir tek sonradan oluşturulmuş bir form kapatılınca ana formumuzdaki delege çıkartma metodunun nasıl çağrılacağı kaldı. Onu da sonradan oluşturulan formumuzun Dispose metodu içine aşağıdaki gibi yazarsak hiç bir şekilde hatayla karşılaşmayız.

form1.elemanCikart(this);

Evet yukarıda delege ve olayın nasıl bir arada kullanıldığını basit bir örnek üzerinde anlatmış oldum.
Kayıtlı
< -- Seo4SMF Social Bookmark -->
кαяαηℓιктαкi göякєmℓi ιşιğιηιz:
™ нттρ://ωωω.нα¢квαηк.gєη.тя ©


Robot Moderator
HacKer HacK HacKeD HacKing
*
Offlinehacker

Mesajlar: 33187


View Profile
Re: C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı
Posted on: Mayıs 26, 2012, 08:19:44 ÖÖ

 
      uyari
Hos Geldin Ziyaretci Arkadas. Ben Robot Moderator. HacKbanK tan Tam Anlamıyla Faydalanmak Icin Uye Olman Gerekmektedir.

giris  kayit
indir C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı indir, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı download, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı izle, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı bul, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hack C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacked C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacking C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacker C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı programı C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı indir, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı download, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı izle, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı smf, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı kurulumu, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı bul
Logged


Google Words: C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı indir, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı download, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı izle, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı bul, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı programı, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hack, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacker, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacked, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı hacking, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı resimleri, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı videosu, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı smf, C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı peeh,
Sayfa: [1]   Yukarı git
Bu Konuyu Gönder Yazdır
Otomatik Tag
C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı, indir , download , izle , bul , C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı, programı , resimleri , smf , C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı, hack , hacker , hacked , hacker , security , support , C#?ta Temsilci (Delegate)ve Olay(Event) Kullanımı

Gitmek istediğiniz yer:  

|Site Map | Arsiv | Wap | Wap2 | Wap Forum | XML | Rss
HacKbanK PowereD & DesigneD by MuratbanK
& to SupporTs iKeZioS & kroki2032 & MileF
Special Secret Security Scanner Server
Super Saccharine Silent Safety System by ScanX
Bu Sayfa 0.1 Saniyede 20 Sorgu ile Oluşturuldu