可以通过C#代码获取设置为Control的方法/委托列表吗?让我解释一下.. 例如。
假设有这样的定义:
foo.Click += (a, b) => { ... }
//..
foo.Click += (A,B) => { ... }
一种megic方法:
var baa = foo.GetEvents("Click");
返回
baa[0]
指向(a, b) => { ... }
baa[1]
指向(A,B) => { ... }
我的风景:我制作动态事件并将其添加到循环内的某些控件中。我希望根据布尔值控制索引1的事件,将使用control.Click - = baa [1]或类似的东西删除。我希望这对你来说很明确。提前谢谢。
答案 0 :(得分:2)
不,没有办法做到这一点。事件的目的是隐藏支持委托字段(严格来说,可能根本没有支持字段),因此您只能订阅或取消订阅该事件。
这样做的原因是订阅者(在观察者模式中也称为“观察者”)不应该知道其他订阅者,更不用说取消订阅它们了。如果你的邻居取消了对你喜欢的杂志的订阅,你会怎么说? ;)
编辑:实际上,是一种方法,但它很丑陋且不可靠。假设您知道类如何存储其事件处理程序(通常是委托字段,但在Windows窗体中它是不同的),您可以使用私有成员上的反射来检索事件处理程序。