简短的技术问题:
如果我在下面的课程中有不确定数量的重叠(按时间)实例。它是什么以及如何确保,"这个"在" call_back_when_done"属于同一个"这个"就像在"开始"?
class MyClass{
int ident = -1;
bool ready = false;
void Start(string url){
ident = aStaticClass.DoSomethingAndForkThread(url, callback_when_done);
}
void call_back_when_done(){
ready = true;
}
}
e.g:
for (int i=0; i < 3; i++)
new MyClass().Start(<aURL>);
谢谢
答案 0 :(得分:0)
首先,您可以将该功能绑定到&#34;这个&#34;就像这里描述的使用currying:(How) is it possible to bind/rebind a method to work with a delegate of a different signature?
我更喜欢lambda函数用于您的示例案例,如下所述:C# Lambdas and "this" variable scope
Lambda函数绑定到&#34;这个&#34;的范围。创建它们的上下文。您的周围类的成员将自动对Lambda函数可见。使用Lambda函数,您将获得更短的代码,编译器也可以更好地优化代码。
答案 1 :(得分:0)
保证。
当您在callback_when_done
中将DoSomethingAndForkThread
传递给Start
时,您不仅要传递原始函数指针(就像在C ++中使用&MyClass::callback_when_done
那样,而是某种元组由要调用的方法和应该调用该方法的对象(this
)。
如果您更喜欢它,您也可以手动编写闭包:
void Start(string url) {
var that = this; // that get's captured by the closure
ident = aStaticClass.DoSomethingAndForkThread(url, () => that.callback_when_done());
}