代码之家  ›  专栏  ›  技术社区  ›  serhio

NET3/4是否允许对事件进行二进制反序列化?

  •  7
  • serhio  · 技术社区  · 16 年前

    在.NET中(至少<=2) 当事件由不可序列化的对象(如Windows窗体)处理时,序列化引发事件的对象会出现问题。

    可以找到一些解决方法,实现自定义序列化或使用委托而不是事件:

    然而,它们似乎都不能完全满足作者和用户。

    NET3/4解决了这个问题吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Paul Williams    16 年前

    事件通过创建委托成员来处理。如果您自己显式定义这个成员,您应该能够添加 NonSerialized 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
    
    推荐文章