让我们说,我不能修改A类。
我在class A<T>
中有这个,有JumpNext()
方法:
public void JumpNext();
它会在class A<T>
中触发一个名为Next
这是我班上的B:
public T Next()
{
instanceofA.JumpNext();
//instanceofA.Next += something;
// wait for event
// someting(object sender, AEventArgs e)
//return e.Entry
}
问题是,我的Next
方法必须返回T
事件返回的Entry
AEventArgs
字段中包含的A.Next
实例
那么如何在B类的一个方法中做到这一点?
我正在使用.NET 2.0,但如果它确实可以在任何更高版本中使用,那也可能没问题。
答案 0 :(得分:3)
如果我正确理解你的问题,你想在B.Next()方法中处理A.Next事件。您可以使用anonymous method,执行此操作,但必须注意不要多次注册事件处理程序:
假设Next事件被定义为如此声明的委托:
public delegate vote NextHandler(object sender, AEventArgs e);
你可以这样做:
public T Next()
{
T entry;
NextHandler handler = delegate(object sender, AEventArgs e) {
entry = e.entry;
}
instanceOfA.Next += handler;
try {
instanceOfA.JumpNext();
} finally {
instanceOfA -= handler;
}
return entry;
}
答案 1 :(得分:2)
你可以这样做:
public void T Next()
{
T value = default(T);
EventHandler<AEventArgs> handler = new EventHandler<AEventArgs>(delegate(object sender, AEventArgs e) { value = e.Entry; });
instanceofA.Next += handler;
instanceofA.JumpNext();
instanceofA.Next -= handler;
return value;
}
答案 2 :(得分:0)
我做了两者的组合:
public T Next()
{
T entry = default(T);
EventHandler<AEventArgs> handler = delegate(object sender, AEventArgs e)
{
entry = e.Entry;
};
instanceofA.Next+= handler;
try
{
instanceofA.JumpNext();
}
finally
{
instanceofA.Next-= handler;
}
return entry;
}