2010-02-25 15 views
7

.NET'te (en az < = 2), bu olaylar, bir dizileştirilemez nesne (Windows Formunda olduğu gibi) tarafından ele alındığında olayları toplayan nesnelerin serileştirilmesiyle ilgili bir sorun vardır..NET 3/4 İzinleri Olaylar İkili De/Seri hale getirilsin mi?

VB.NET olayları gerçekleştirdiği için, bir nesneyi serileştirdiğinizde, olayları da serileştirilir (çünkü olaylar gizli çoklu yayın delegesi alanları kullanılarak gerçekleştirilir). Bunun bir yan etkisi, serileştirilen nesne tarafından yükseltilen olayları işleyen herhangi bir nesnenin, nesne grafiğinin bir parçası olarak kabul edilmesi ve aynı zamanda serileştirilmesidir.

Bazı geçici çözümler

özel seri uygulayan veya olaylar yerine delegelere kullanılarak bulunamadı:

Ancak bunların hiçbiri tamamen yazarlara ve kullanıcıları memnun görünüyor.

.NET 3/4 bu sorunu çözüyor mu?

+3

Bu sorun VB.NET özgü değildir - NET nasıl çalıştığını bu kadar. –

+2

Ancak, C# ile 'Field [Alan: NonSerialized]' kullanarak daha "esnek" bir çözüm bulabilirsiniz. En azından, sorunu çözmek için yardımcı yardımcı kod yazmanın özel bir ihtiyacı yoktur. – serhio

+0

@serhio: bu özellik de VB çalışmıyor mu? Neden olmasın? WithEvents'lardan bahsetmiyorum. –

cevap

3

Olaylar, temsilci üyesi oluşturularak işlenir. Bu üyeyi kendiniz açıkça tanımlarsanız, buna NonSerialized özniteliğini ekleyebilmeniz gerekir. Örneğin See this thread for a reference.

:

Public Delegate Sub MyEventDelegate() 

<NonSerialized()>Private m_MyEventDelegate As MyEventDelegate 

Public Custom Event MyEvent As MyEventDelegate 
    AddHandler(ByVal value As MyEventDelegate) 
     m_MyEventDelegate = DirectCast(System.Delegate.Combine(m_MyEventDelegate, value), MyEventDelegate) 
    End AddHandler 

    RemoveHandler(ByVal value As MyEventDelegate) 
     m_MyEventDelegate = DirectCast(System.Delegate.Remove(m_MyEventDelegate, value), MyEventDelegate) 
    End RemoveHandler 

    RaiseEvent() 
     If m_MyEventDelegate IsNot Nothing Then 
      m_MyEventDelegate.Invoke() 
     End If 
    End RaiseEvent 
End Event 
+0

Sözdizimi için teşekkürler. RaiseEvent sözdizimini hiç görmedim sanmıyorum. –

İlgili konular