我有几种方法都具有相同的签名(参数和返回值),但是不同的名称和方法的内部原理不同。 我想将要运行的方法的名称传递给另一个方法,该方法将调用传入的方法。
public int Method1(string)
{
... do something
return myInt;
}
public int Method2(string)
{
... do something different
return myInt;
}
public bool RunTheMethod([Method Name passed in here] myMethodName)
{
... do stuff
int i = myMethodName("My String");
... do more stuff
return true;
}
public bool Test()
{
return RunTheMethod(Method1);
}
这段代码不起作用,但这就是我想要做的。 我不了解如何编写RunTheMethod代码,因为我需要定义参数。
#1楼
这是一个示例,可以帮助您更好地理解如何将函数作为参数传递。
假设您具有“ 父”页面,并且想要打开一个子弹出窗口。 在父页面中,应基于子弹出文本框填充一个文本框。
在这里您需要创建一个委托。
Parent.cs //代表声明公共代表void FillName(String FirstName);
现在创建一个将填充您的文本框的函数,并且该函数应映射委托
//parameters
public void Getname(String ThisName)
{
txtname.Text=ThisName;
}
现在单击按钮,您需要打开一个子弹出窗口。
private void button1_Click(object sender, RoutedEventArgs e)
{
ChildPopUp p = new ChildPopUp (Getname) //pass function name in its constructor
p.Show();
}
在ChildPopUp构造函数中,您需要创建父级//页面的“代理类型”参数
ChildPopUp.cs
public Parent.FillName obj;
public PopUp(Parent.FillName objTMP)//parameter as deligate type
{
obj = objTMP;
InitializeComponent();
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
obj(txtFirstName.Text);
// Getname() function will call automatically here
this.DialogResult = true;
}
#2楼
您需要使用一个委托 。 在这种情况下,所有方法都使用string
参数并返回一个int
最简单地由Func<string, int>
委托1表示 。 因此,只需进行如下更改即可使您的代码正确无误:
public bool RunTheMethod(Func<string, int> myMethodName)
{
// ... do stuff
int i = myMethodName("My String");
// ... do m