1

可以通过 C# 代码获取设置为 Control 的方法/委托列表?让我更好地解释一下..例如。

假设一些定义是这样的:

foo.Click += (a, b) => { ... }
//..
foo.Click += (A,B) => { ... }

还有一个神奇的方法:

var baa = foo.GetEvents("Click");

退货

baa[0]指着(a, b) => { ... }

baa[1]指着(A,B) => { ... }

我的风景:我制作并动态添加事件到循环内的一些控件。我希望根据布尔值控制索引一的事件,将通过使用 control.Click -= baa[1] 或类似的东西来删除。我希望这对你来说很清楚。提前致谢。

4

1 回答 1

2

不,没有办法做到这一点。事件的重点是隐藏支持委托字段(严格来说,可能根本没有支持字段),以便您只能订阅或取消订阅事件。

这样做的原因是订阅者(也称为观察者模式中的“观察者”)不应该知道其他订阅者,更不用说取消订阅它们了。如果你的邻居取消了你对你最喜欢的杂志的订阅,你会怎么说?;)


编辑:实际上,有一种方法可以做到这一点,但它丑陋且不可靠。假设您知道类如何存储其事件处理程序(通常是委托字段,但在 Windows 窗体中不同),您可以对私有成员使用反射来检索事件处理程序。

于 2012-06-07T22:44:31.573 回答