2010-01-21 18 views
5

dokümanlar ki:F # IDelegateEvent ve IEvent arasındaki fark nedir?

F # üyesi bir .NET olay gibi diğer .NET dillere görünmesi için approriate NET meta üreten tip IDelegateEvent ile uyumlu olmayan sanal örnek üyesi özelliklerine özel statü verir.

Ancak IDelegateEvent ve IEvent davranışı, CLIEvent özniteliği ile veya yokken aynı görünüme sahip görünüyor.

1.9.7.8 kullanıyorum.

cevap

4

IEvent, IDelegateEvent öğesinden miras alır, ancak izin verilen temsilci türüne (döndürme birimine zorlamak) ek bir kısıtlama getirir. IEvent ayrıca IObservable'dan miras alır. Tuhaf türde bir olaya sahip olmak istemediğiniz sürece, daha yaygın IEvent yerine base IDelegateEvent arabirimine güvenmek için bir neden yoktur.

[<CLIEvent>]'un fark etmediğinde ne demek istiyorsunuz? FSI'da, olayların tür üzerinde doğru şekilde oluşturulmasını engelleyen bir hata vardır (ör. Type.GetEvents() aracılığıyla görüldüğü gibi), ancak kodlar derlendiğinde olaylar doğru şekilde üretilir. FSI olsa bile, [<CLIEvent>] özniteliğini uyguladığınızda oluşturulan add_ ve remove_ yöntemlerini görmelisiniz.

+0

Dokümanların yanıltıcı olduğunu düşünüyorum. Yukarıda belirtilen paragraf, normal bir .NET olayı istiyorsanız IDelegateEvent kullanmanız gerektiğini gösterir, aksi halde IEvent kullanın. IDelegateEvent, CLIEvent özniteliğini kullanma gereksinimini ortadan kaldırırmış gibi görünür. – Daniel

+0

Sorunuzu yanıtlamak ve önceki yorumuma genişletmek için ... IDelegateEvent ve IEvent, CLIEvent özniteliği olan veya olmayan diğer .NET dilleriyle aynı görünür. Her ikisi de iyi çalışıyor, ancak dokümanlar bir fark olduğunu gösteriyor gibi görünüyor (belki de bu fark, IDelegateEvent'in CLIEvent özniteliğine, yani görünüşe göre yanlış olması gerekmez). – Daniel

4

F # sürümünün bazı tarihi sürümlerinde, standart .NET olayları için IDelegateEvent ve F # olayları için IEvent kullanırsınız. CLIEvent özniteliği daha yakın bir zamanda eklendi (çünkü orijinal çözümün birkaç sorunu vardı). Yani, ben IDelegateEvent şimdi çok nadiren yararlı olduğunu düşünüyorum (kvb bazı daha belirgin farklılıklar bahsetti). .NET oldukça sık görünen örnek IEvent<EventHandler, EventArgs> için herhangi işleyicilerle kullanılabilecek bir (F # kütüphanelerde yerde tanımlanır, inanıyorum) işleyicisi Handler<'T> ile olay ve IEvent<'Del, 'T>, hangi IEvent<'T> arasındaki

Daha ilginç farktır kütüphaneler ...

İlgili konular