为了表示在线程上执行的方法,我使用
ParameterizedThreadStart
并传递方法的名称。在这种情况下,方法名称为SelectJob
,实例化如下:
ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob);
protected void SelectJob(object index)
{
...
}
为了重用一部分代码,我希望,如果可能的话,将方法名称存储在变量中,但IntelliSense会将ParameterizedThreadStart
的方法签名显示为ParameterizedThreadStart(void (object) target)
而我不是确定我如何存储这种价值。从MSDN开始,我意识到这是一个代表,所以在阅读How to: Declare, Instantiate, and Use a Delegate之后,我试图宣布......
delegate void Del(string str);
Del selectDelegate = SelectJob;
...但由于SelectJob
方法不是静态的,我无法做到这一点。简单地使方法静态不是一个简单的选择。
是否有其他方式进行此声明?
谢谢!
答案 0 :(得分:3)
在构造函数中初始化委托实例?
public class MyClass
{
private ParameterizedThreadStart starter;
public MyClass()
{
starter = SelectJob;
Del selectDelegate = SelectJob;
}
delegate void Del(string str);
protected void SelectJob(object index)
{
}
}
答案 1 :(得分:0)
您只需将其分配给构造函数中的Action字段:
class Boo
{
public Boo()
{
_myDelegate = SelectJob;
}
Action<object> _myDelegate ;
protected void SelectJob(object index)
{
}
}
或者,有一个总是返回你的委托的方法:
class Hoo
{
protected Action<object> SelectJobDelegate(object index)
{
return o =>
{
// do something with o
};
}
}