【问题标题】:Theoretical: Delegates passed to constructor理论:委托传递给构造函数
【发布时间】:2011-06-23 13:04:24
【问题描述】:

所以我想知道这样的事情是否可行:

我是一个程序,我即将创建我的一个对象的实例。我触发了一个事件,让所有订阅者都知道我将要创建一个对象。作为此事件的一部分,我将通过一个 Hashtable,稍后将其传递给我的对象的构造函数。

订阅者将能够修改此哈希表是吗?他们可以为委托类型添加条目,并将该类型的委托作为值?一旦订阅者完成他们的业务,预创建事件就会结束。对 Hashtable 所做的更改是否会在触发事件的对象中表示?那么,如果这个 Hashtable 被传递给一个对象的构造函数,那么该对象可能包含来自外部源的方法?

所以本质上-

去创建对象
触发请求委托事件
在对象的构造函数中使用由事件修改的委托哈希表
如果存在相同类型的委托,对象使用哈希表中的方法代替自己的方法
现在对象在标准函数上运行自定义代码

再说一次,我真的不知道我所说的是否可行,或者是否有意义。

【问题讨论】:

  • 我不喜欢在多个客户端之间传递可变哈希表的想法。

标签: c# dynamic delegates theory


【解决方案1】:

这是可能的,但我建议不要公开发送HashSet<T>。原因是任何订阅者都可以修改HashSet<T> 中的值。

相反,我不知道一个事件在这里是正确的做法。我仍然会使用委托,但我不会将它们作为事件公开。 pub/sub 模式在这里可能会更好(其中想要通知的对象将通过 Sub/Unsub 方法传递委托)。

这允许您修改委托签名,以便在您进行调用时实现将数据值返回给您(而不是传递HashSet<T>)。

然后,您可以拨打GetInvocationList 来获取每位代表,而不是只拨打一个电话。然后,您将循环并收集返回的值。

从那时起,您将适当地聚合值,然后将该聚合传递给对象的构造函数。

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多