假设我有 2 个类,classA 和 classB。对象 A(A 类)包含一些对象 B(B 类)。 B 对象有一个事件,对象 A 订阅了一个委托(delegate),该委托(delegate)在(任何 B 对象的)事件发生时执行。
private void fooEventHandler(object sender, EventArgs e)
{
...
}
在 fooEventHandler 中做了一些事情(必须在 A 中完成)之后,我想向引发事件的 B 对象发出我在 fooEventHandler 中所做的结果的信号。所以我做了以下事情:
private void fooEventHandler(object sender, EventArgs e)
{
...
if (allOK)
((classB)sender).isOK();
else
((classB) sender).isNotOK();
}
所以我实际上是在使用发送器在事件发生后调用 objectB 上的特定方法。我这样做是为了避免将某些从设计角度来看不应该在 objectB 中的 objectA 成员传递给 objectB(在他的构造函数中)。这是处理问题的合理方法吗? (object sender)这样用很常见吗?
最佳答案
我觉得你把你的 A 类和你的 B 类联系在一起了。如果在处理事件后你需要 A 做的只是调用某个回调 - 然后传递回调。这样,您可以传入例如 lambda 表达式,或传递与 B 或其他相关的类的方法。
所以-
private void fooEventHandler(Action p_okCallback, Action p_notOkCallback)
{
...
if (allOK)
p_okCallback();
else
p_notOkCallback();
}
或-
private void fooEventHandler(Action<bool> p_callback)
{
...
p_callback(allOk);
}
如果事件不受您的控制,您可以按照 Helmer 和 Inherit from EventArgs 的建议进行操作。但同样 - 我会传递回调,而不是类本身。
另一种选择 - 如果您觉得需要多个方法并且觉得传递一打回调很尴尬 - 考虑传递一个接口(interface),其中包含您需要的方法。
关于c# - 在订阅另一个对象事件的委托(delegate)中使用(对象发送者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18432388/