Aynı imzaya sahip bir dizi olayım var. Şimdi tüm olayları için bunu yapmak için genel olay işleyici kaldırma yöntemi oluşturabilir miyim acaba?Genel olay oluşturma yöntemi nasıl oluşturulur
- bu
<T>
olarak bir etkinlik göndermek mümkün mü? Bkz.
Aynı imzaya sahip bir dizi olayım var. Şimdi tüm olayları için bunu yapmak için genel olay işleyici kaldırma yöntemi oluşturabilir miyim acaba?Genel olay oluşturma yöntemi nasıl oluşturulur
<T>
olarak bir etkinlik göndermek mümkün mü? Bkz., bir yöntem yapabilirsiniz herhangi biri. Etkinliklerinizin tüm EventHandler<T>
olsaydı Örneğin, şunu kullanabilirsiniz:
private void RaiseEvent<T>(EventHandler<T> eventHandler, T eventArgs)
{
if (eventHandler != null)
{
eventHandler(this, eventArgs);
}
}
Daha sonra üzerinden bu diyebiliriz: Reed Copsey cevabının statik sürümü için
this.RaiseEvent(this.MyEvent, new MyEventArgs("Foo"));
Bkz. this. Ne istediğini açıklıyor.
yapabilirsiniz bir daktilo temsilci kullanarak ve bu etkinlik için kullanarak bir daktilo etkinlik oluşturmak: ile çalışır olay yükseltmek için bu tek bir sınıfın içindeyse
public delegate void myDel<T>(T stuff);
public event myDel<int> myEvent;
public doStuff()
{
myDel(1);
}
Sadece OP istediğini yapma görünmüyor bunu yapmaz, bu uygun değildir. [daha fazla bilgi] (http://meta.stackexchange.com/questions/94022/how-can-i-link-to-an-external-resource-in-a-community-friendly-way) bu uygulama ile – Servy
, ben statik sınıf oluşturuldu Event
:
public static class Event
{
public static bool Raise<T>(Object source, EventHandler<T> eventHandler, T eventArgs) where T : EventArgs
{
EventHandler<T> handler = eventHandler;
if (handler != null)
{
handler(source, eventArgs);
return true;
}
return false;
}
}
Bu aynı zamanda olay işleyicileri tip EventHandler<T>
vardır varsayar. Dönüş tipi void
'dan bool
'a değiştirildi ve olayın dinleyicileri olup olmadığını döndürdü. Nadiren kullanılır, bu yüzden void
'a geri dönmek için çekinmeyin.
Örnek kullanım: SO * sadece * o soruya cevap yapsa bile, bir bağlantı sonrası üzerinde
public event EventHandler<FooArgs> FooHappend;
public void Foo()
{
Event.Raise(this, FooHappend, new FooArgs("Hello World!");
}
, Yarış durumundan kaçınmak için null'u kontrol etmeden önce işleyiciyi yerel bir değişkene koymaya gerek var mı? –
@ mohsen.d Yarış durumu yok. eventHandler bir parametredir. – CrazyCasta
@Reed Copsey üzgünüm, ama biraz daha açıklayabilir misiniz? teşekkür ederim –