Olaylar: yayımlama/abone olma, event anahtar sözcüğü
Olaylarla yayımlama/abone olma işlemini öğrenin: event tanımlayın, işleyiciler ekleyip kaldırın, verileri EventArgs aracılığıyla aktarın ve OnX kalıbıyla olayı tetikleyin.
Olaylar: yayımlama/abone olma, event anahtar sözcüğü, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.
Olaylara genel bakış
Amaç: olaylarla yayımlama ve abone olma işlemlerini gerçekleştirmek.
- Yayımcı üzerinde bir event tanımlayın.
- Subscribe işlemini +=, abonelikten çıkma işlemini -= ile yapın.
- Yayımcı içinde olayı güvenli biçimde tetikleyin.
- Verileri EventArgs kullanarak geçirin.
Temel olay kullanımı
Bir event dışarı açın ve dinleyicilerin bağlanıp ayrılmasına izin verin. Onu yalnızca yayımcı çağırabilir.
using System;
public class Button
{
public event EventHandler Click;
public void SimulateClick()
{
// Safe raise: copy then invoke if not null (C# 6-safe)
EventHandler h = Click;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void OnClick(object sender, EventArgs e)
{
Console.WriteLine("Clicked!");
}
public static void Main(string[] args)
{
Button b = new Button();
b.Click += OnClick; // subscribe
b.SimulateClick(); // prints "Clicked!"
b.Click -= OnClick; // unsubscribe
b.SimulateClick(); // no output
}
}
Veri içeren olay
Abonelere yararlı veriler geçirmek için EventArgs (veya EventHandler<TEventArgs>) kullanın.
using System;
// Data for the event
public sealed class PriceChangedEventArgs : EventArgs
{
public decimal OldPrice { get; private set; }
public decimal NewPrice { get; private set; }
public PriceChangedEventArgs(decimal oldP, decimal newP)
{
OldPrice = oldP; NewPrice = newP;
}
}
public sealed class Product
{
private decimal _price;
public event EventHandler<PriceChangedEventArgs> PriceChanged;
public decimal Price
{
get { return _price; }
set
{
if (value != _price)
{
decimal old = _price;
_price = value;
EventHandler<PriceChangedEventArgs> h = PriceChanged;
if (h != null) h(this, new PriceChangedEventArgs(old, _price));
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
Product p = new Product();
p.PriceChanged += delegate(object s, PriceChangedEventArgs e)
{
Console.WriteLine("Price: " + e.OldPrice + " -> " + e.NewPrice);
};
p.Price = 10m;
p.Price = 12m;
}
}
Çoklu yayın ve lambda ifadeleri
Olaylar çoklu yayın özelliğine sahiptir: birden çok işleyici abonelik sırasına göre çalışır. Adlandırılmış veya anonim işleyiciler kullanın.
using System;
public class Alarm
{
public event EventHandler Ring;
public void Trigger()
{
EventHandler h = Ring;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void HandlerA(object s, EventArgs e) { Console.WriteLine("A"); }
static void HandlerB(object s, EventArgs e) { Console.WriteLine("B"); }
public static void Main(string[] args)
{
Alarm a = new Alarm();
a.Ring += HandlerA; // named
a.Ring += delegate(object s, EventArgs e) { Console.WriteLine("lambda"); }; // anon
a.Ring += HandlerB;
a.Trigger(); // prints A, lambda, B (multicast order)
}
}
OnX tetikleme deseni
Olayları tetiklemek için korumalı bir OnX yöntemi kullanın. Delegate'i yerel bir değişkene kopyalayın ve çağırmadan önce null olup olmadığını denetleyin.
using System;
public class Ticker
{
public event EventHandler Tick;
protected virtual void OnTick()
{
EventHandler h = Tick; // copy to local
if (h != null) h(this, EventArgs.Empty);
}
public void RunOnce()
{
// do work...
OnTick(); // raise via protected method
}
}
public class Program
{
static void Show(object s, EventArgs e) { Console.WriteLine("Tick!"); }
public static void Main(string[] args)
{
Ticker t = new Ticker();
t.Tick += Show;
t.RunOnce();
}
}
Olay ipuçları ve tuzaklar
İpuçları:
- Bir aboneye artık gerek kalmadığında her zaman abonelikten çıkın ( -= ).
- İşleyicileri kısa tutun; uzun süren işler kuyruğa alınmalıdır.
- Veri geçirmek için EventArgs (veya bir alt sınıfını) kullanın.
- Olayı yalnızca yayımcı tetiklemelidir.
event anahtar sözcüğünün rolü
Tekrar
Tekrar: Bir event tanımlayın, dinleyicilerin bağlanıp ayrılmasına izin verin, verileri EventArgs ile geçirin ve olayı korumalı bir OnX yöntemiyle tetikleyin.
Sıkça Sorulan Sorular
“Olaylar: yayımlama/abone olma, event anahtar sözcüğü” dersi ücretsiz mi?
Evet — “Olaylar: yayımlama/abone olma, event anahtar sözcüğü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.
“Olaylar: yayımlama/abone olma, event anahtar sözcüğü” dersinde ne öğreneceğim?
Olaylarla yayımlama/abone olma işlemini öğrenin: event tanımlayın, işleyiciler ekleyip kaldırın, verileri EventArgs aracılığıyla aktarın ve OnX kalıbıyla olayı tetikleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.
“Olaylar: yayımlama/abone olma, event anahtar sözcüğü” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- delegate, Action/Func, kapanışlar
- Olaylar: yayımlama/abone olma, event anahtar sözcüğü
- Olay kalıpları ve tuzaklar (bellek sızıntıları)