Sınıfımda, diğer sınıfların abone olabileceği bir etkinliği bildirmek istiyorum. Etkinliği bildirmenin doğru yolu nedir?C# olayında bir olay bildirme sözdizimi nedir?
Bu işe yaramazsa:
public event CollectMapsReportingComplete;
Sınıfımda, diğer sınıfların abone olabileceği bir etkinliği bildirmek istiyorum. Etkinliği bildirmenin doğru yolu nedir?C# olayında bir olay bildirme sözdizimi nedir?
Bu işe yaramazsa:
public event CollectMapsReportingComplete;
Sen tip söylemeyi unutmuşum. Gerçekten basit olaylar için, EventHandler
yeterli olabilir:
public event EventHandler CollectMapsReportingComplete;
Bazen (EventArgs
parametresi için özel bir türü kullanmak Adam Robinson'un yorumu görmek için izin etkinlikler için kullanılmak üzere kendi temsilci türü bildirmek isteyeceksiniz):
public delegate void CollectEventHandler(object source, MapEventArgs args);
public class MapEventArgs : EventArgs
{
public IEnumerable<Map> Maps { get; set; }
}
Ayrıca yerine kendi türlerini ilan jenerik
EventHandler
türü kullanabilirsiniz
:
public event EventHandler<MapEventArgs> CollectMapsReportingComplete;
Bunun için reddedilmeyecek, ancak .NET'teki kural, olay delegelerinin yalnızca bir ('object') göndereni ve 'EventArgs''dan miras kalan bir ek parametre içermesi gerektiğidir. Bunu yapmak, kendi bildirmek yerine genel 'EventHandler
@Adam: Kesinlikle haklısınız ve cevabımı bunu yansıtacak şekilde güncelledim. –
Sen temsilci olayını yazın belirtmek gerekir: Burada
public event Action CollectMapsReportingComplete;
ben System.Action
kullandık ama artık istediğiniz temsilci türü (hatta özel bir temsilci) kullanabilir. Belirttiğiniz temsilci türünün bir örneği etkinlik için destek alanı olarak kullanılacaktır.
public event EventHandler MyEvent;
Örneği
/// </summary>
/// Event triggered when a search is entered in any <see cref="SearchPanel"/>
/// </summary>
public event EventHandler<string> SearchEntered
{
add { searchevent += value; }
remove { searchevent -= value; }
}
private event EventHandler<string> searchevent;
ortak etkinlik [DelegateType] [EventName];
@IlliaRatkevych Burada bu soruyu yapmayı seviyorum, SO'nun düzeninin çoğu MSDN dökümantasyonundan daha kolay okunabiliyor. –
@IlliaRatkevych Katılmıyorum - SO "uzman" programcılar için kullanılmamalıdır, tüm seviyelerde tüm geliştiricilere yardımcı olması gerekiyordu. Bu benim dürüst düşüncemde tamamen yasal bir sorudur. –