C# 分层事件处理程序

C# 分层事件处理程序,c#,delegates,event-handling,C#,Delegates,Event Handling,假设我有一个盒子。盒子里有一串信封。每个信封里都有许多索引卡。如果我在一个索引卡上写东西,那么整个框中的每个索引卡都应该执行foo()方法 在我看来,索引卡应该告诉信封发生了什么事。它的信封应该告诉盒子它的一张索引卡出了什么事。该框告诉所有信封通知其所有索引卡执行方法foo() 我对C#的事件处理程序/委托功能相对不熟悉。据我所知,这似乎对他们很有用。代表们是走这条路,还是有更好的办法?如何梳理出多级事件处理程序的框架?任何洞察都将不胜感激。如果您确实想使用事件处理程序,那么您必须记住对象(在本

假设我有一个盒子。盒子里有一串信封。每个信封里都有许多索引卡。如果我在一个索引卡上写东西,那么整个框中的每个索引卡都应该执行foo()方法

在我看来,索引卡应该告诉信封发生了什么事。它的信封应该告诉盒子它的一张索引卡出了什么事。该框告诉所有信封通知其所有索引卡执行方法foo()


我对C#的事件处理程序/委托功能相对不熟悉。据我所知,这似乎对他们很有用。代表们是走这条路,还是有更好的办法?如何梳理出多级事件处理程序的框架?任何洞察都将不胜感激。

如果您确实想使用事件处理程序,那么您必须记住对象(在本例中是您的索引卡)“拥有”一个事件并触发它。它不应该关心听的是谁或什么。所以,不管索引卡、信封或其他什么东西是否在听,它只会触发它们

如果我假设一个盒子中有一个包含信封的列表(或索引卡),而信封中有一个包含索引卡的列表,那么您可以:

  • 该框侦听事件,并枚举其中的每个信封 包含枚举要执行更新的每个索引卡的
  • 信封会监听事件并列举它们收到的每一张索引卡 包含以执行更新
  • 每个索引卡都会侦听事件并自我更新
  • 但是,我看到这种方法的问题是索引卡的数量可能很高。所以你可以有很多索引卡,听很多其他索引卡

    我认为在这种情况下,最好采用Rob建议的发布/订阅方法。因此,您实现了一个消息队列,然后更改的索引卡在此处发布更改,并且侦听的所有其他内容都会得到更改的通知。这将是一个更好的方法


    但我认为你的问题有点假设性,所以当你有少量对象时,你可以采用基于事件的方法来实现一个较小的实现。

    如果你确实想使用事件处理程序,那么你必须记住一个对象(在本例中是你的索引卡)“拥有”一个事件并触发它。它不应该关心听的是谁或什么。所以,不管索引卡、信封或其他什么东西是否在听,它只会触发它们

    如果我假设一个盒子中有一个包含信封的列表(或索引卡),而信封中有一个包含索引卡的列表,那么您可以:

  • 该框侦听事件,并枚举其中的每个信封 包含枚举要执行更新的每个索引卡的
  • 信封会监听事件并列举它们收到的每一张索引卡 包含以执行更新
  • 每个索引卡都会侦听事件并自我更新
  • 但是,我看到这种方法的问题是索引卡的数量可能很高。所以你可以有很多索引卡,听很多其他索引卡

    我认为在这种情况下,最好采用Rob建议的发布/订阅方法。因此,您实现了一个消息队列,然后更改的索引卡在此处发布更改,并且侦听的所有其他内容都会得到更改的通知。这将是一个更好的方法


    但我认为您的问题有点假设性,因此您可以采用基于事件的方法来实现较小的实现,可能是在对象数量较少的情况下。

    看起来是发布/订阅模式的一个很好的用例。所有索引卡都将是订阅者,潜在的发布者看起来是发布/订阅模式的良好用例。所有索引卡都是订阅者,也可能是发行者