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

哪里是实现弱同步.NET委托的正确位置?

  •  1
  • Mark  · 技术社区  · 14 年前

    考虑这个班 WindowA 数据库 哪里 数据库

    实现弱同步事件的选项有:

    • WindowA 将委托附加到上的自定义事件 数据库 ,cusom事件逻辑检查调用线程的SynchronizationContext.Current,并将其存储,以便稍后在引发事件时,可以通过SynchronizationContext调用委托。或:

    • 备选案文2: 工具 ProxyC ,作为 数据库 . 目标方法 实现同步和弱引用逻辑,并将调用转发给 WindowA WindowA 可以被垃圾收集,但是 ProxyC 必须先将自身从所有事件中分离,然后才能对其进行垃圾收集。或:

    • 备选案文3: WindowA SharpObservation )在将代理附加到上的事件之前,使代理变弱并同步 . 即。:

      DataB.PropertyChanged+=新的PropertyChangedEventHandler(WindowA.HandlePropertyChanged).Make软弱()

    首先。。。选项1有什么优点吗?虽然它是实现弱引用和同步逻辑的方便地方,但它似乎打破了单一责任模式,迫使数据对象意识到同步和引用语义。

    选项2看起来很好,很干净。我在各个方面都喜欢它,除了它需要额外的工作来创建一个额外的类来处理弱引用。即使如此,除非代理知道如何删除以其为目标的代理,否则会出现内存泄漏。

    选项3允许代理自己承担同步和弱引用的责任,但有一个限制,即附加事件的代码必须调用实用程序方法。据我所知,大多数UI数据绑定技术不允许您控制数据绑定如何附加到上的事件 数据库 (因此选择1的alure)。

    最大的问题是。。。 这里有适合所有人的款式吗?是否有一种比所有其他模式都好的单一模式?

    0 回复  |  直到 14 年前