Navigasyon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Events (olaylar)
İlkönce olayın tanımını yapalım, olaylar bizim formda yaptığımız işlemleri kontrol eder. Örneğin butona tıklamamız bir olaydır, mouse ile üstüne gelmemiz gene bir olaydır. Bu olaylar esnasında istediğimiz kodların çalıştırılmasını/metodların çağrılmasını olay yöneticisi dediğimiz temsilciler üstlenir.
Olaylar sınıfların bir üye elemanıdır. Olayın nasıl tanımlandığını aşağıda görebilirsiniz.
[erişim belirleyici] event [delegate türü] [olay adı];
Tanımlanmasından da anlaşıldığı üzere, event yapısı bağımsız değildir.
Yine aynı yolu izleyelim, önce altta verilen kodu inceleyin (uygulanacak adımları sırasıyla verdim), kendiniz ne olduğunu anlamaya çalışın, ardından verdiğim açıklamalarla tam anlamaya çalışalım.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _Event
{
delegate void TemsilciHandler();
class Sinifim
{
public event TemsilciHandler Eventim;
public void eventMetodum()
{
if (Eventim!=null)
{
Eventim();
}
}
}
class Program
{
static void Main(string[] args)
{
Sinifim mye = new Sinifim();
mye.Eventim += new TemsilciHandler(mye_Eventim);
mye.eventMetodum();
Console.Read();
}
static void mye_Eventim()
{
Console.WriteLine( "olay gerçekleşti." );
}
}
Adımda temsilcimizi tanımladık, geri dönüş tipi void ve parametresi olmayan bir temsilci.
- Adımda TemsilciHandler tipinde bir olay tanımladık, Eventim olayı artık TemsilciHander ile beraber çalışacak.
- Adımda olayımızın gerçekleşip gerçekleşmediğini kontrol edecek bir metod hazırladık.
- Bu adımda if ile kontrol gerçekleştirmemizin sebebi şudur :
Bu olay gerçekleştiğinde yapılacak iki şey vardır ;
1. Olay gerçekleştiği zaman herhangi bir iş yapılabilir (size kalmış)
2. Olay gerçekleştiğinde hiçbirşey yapılmayabilir.
Eğer 1. şey olursa yani bir metod event a atanmış ise if kullanmaya gerek yoktu. Ama bu olay gerçekleştiğinde event a hiçbir metod atanmamışsa çalışma zamanında NullReferenceException hatasını alırız. Bunu her zaman kullanmamız gerekiyor. Eğer herhangi bir metod bağlanmışsa yani null değil ise Eventim olayına bağlanan metodu çağır. (Biz bu çağırma işlemini delegate ile ilgili dökümanda yapmıştık.)
- Adımımızda sınıfımızı kurduk ve Eventim olayına mye_Eventim metodunu atadık, dikkat edin burada yaptığımız işlemin delegate de yaptığımız bir işlemle hiçbir farkı yok, ikisinin atama şekli aynı.Biz mye.Eventim+= dedikten sonra iki defa tab tuşuna basarsak derleyici bizim için otomatik olarak metod üretiyor bu yüzden alttaki metodu da aynı adım içine aldım. Olay gerçekleştiğinde mye_Eventim metodununu çağrılmasını event’a bildirdik. Olay gerçekleştiği zaman bu metod çağırılacaktır. Biz olayda hiçbir kontrol gerçekleştirmediğimiz için metod direk çağrılacaktır. Normalde olaylar belirli kontroller yapar, ben giriş olduğu için hiçbir kontrol gerçekleştirmedim.
- Eğer Adım 3 te neden biz böyle bir metod tanımlama ihtiyacı duyduk ? diye sormuş olabilirsiniz, nedenini bu adımda yaptığımız işlem açıklıyor. Adım 6 da eventMetodum() metodunu çağırarak olayın gerçekleşip gerçekleşmediğini kontrol etmesini söyledik, dediğim gibi biz hiçbir kontrolden geçirmediğimiz için direk çalıştı. Eğer bir kontrol gerçekleştirseydik, olayın gerçekleşmediği zaman return; deyip metoddan çıkmasını sağlardık, olayın gerçekleştiği zaman ise Adım4. teki kodları yazardık.
|
|
|
|
|
|
|
Bugün 14359 ziyaretçi (22495 klik) kişi burdaydı! |
|
|
|
|
|
|
|