所以我对如何将具有特定签名的方法传递给表单时感到困惑,然后该表单可以使用自己的参数调用所述方法并评估返回值。 问题是,我读的关于委托,事件,事件处理程序,订阅以及Func和Actions的内容越多,我就越困惑。 (我已经尝试了很多,修改了很多,没有工作,但我想那是因为我不知道它们是如何工作的) 我想做的例子:
public class WorkingStatic {
public static SetUpForm() {
SomeForm tmp_Form = new SomeForm(StaticMethod);
/*somehow pass the method to the form so that it can invoke it*/
tmp_Form.Show();
}
public static int StaticMethod(int p_Int) {
// do whatever..
return p_Int;
}
}
这只是一个带有某个方法的类,重要的是该方法将int作为参数并返回一个int。
现在我希望Form能够正常运行..因此代码无效:
public partial class SomeForm : Form {
private Method m_Method;
public SomeForm(/*here I pass a method*/Method p_Method) {
InitializeComponent();
m_Method = p_Method;
}
public void SomeMethodThatGetsCalledByAButton() {
m_Method.Invoke(/*params*/ 1); /*would return 1*/
}
}
这些都没有“令人惊讶”,因为我对此感到沮丧,我以为我会问你们。
提前致谢!
-RmOL
答案 0 :(得分:0)
由于我标记的答案已删除,我将发布对我有用的内容。 感谢@Fabio提供解决方案。 (作为评论)
public class WorkingStatic {
public static SetUpForm() {
SomeForm tmp_Form = new SomeForm(Func<int, int>(StaticMethod));
/*pass the method to the form so that it can invoke it*/
tmp_Form.Show();
}
public static int StaticMethod(int p_Int) {
// do whatever..
return p_Int;
}
}
public partial class SomeForm : Form {
private Func<int, int> m_Method;
public SomeForm(Func<int, int> p_Method) {
InitializeComponent();
m_Method = p_Method;
}
public void SomeMethodThatGetsCalledByAButton() {
m_Method(/*params*/ 1); /*would return 1*/
}
}
可以像任何其他类型一样处理。 (当传递方法时,不要在其后放置关于该方法的普通括号或任何其他参数)
问题中显示的示例如下所示:
{{1}}