如何创建一个可以执行传递给它的任何其他方法的方法
How to make a method that can execute any other method passed to it
我正在尝试制作一个应用程序,它将对目录中的每个文件执行某事。
那个东西应该是某种方法。但是因为我不知道具体是哪种方法,所以我正在尝试实现它,所以我的 "iterating" 方法接受任何方法的参数或某种方法引用,这样他就可以在每个文件上调用它。
重点是关于如何处理每个文件有很多选项,用户可以选择他想要的那个。这些选项也必须开放扩展,所以一周后我可能会决定添加一个新选项,这就是为什么我需要:
一种可以调用任何方法的方法,而无需事先了解其签名。
Actions 和 Functions 对我不起作用,因为它们需要具体的签名。委托也是如此,据我所知并且(我认为)它们不能作为方法参数传递。
我想要实现的示例:
void Iterate(DirectoryInfo dir, method dostuff)
{
foreach(var file in dir.GetFiles())
{
dostuff(file);
//And this is the point where I feel stupid...
//Now I realise I need to pass the methods as Action parameters,
//because the foreach can't know what to pass for the called method
//arguments. I guess this is what Daisy Shipton was trying to tell me.
}
}
您的想法可以实现,但是执行某事的函数必须始终具有相同的签名;为此,您可以使用预定义的委托类型。考虑以下代码段。
public void SomethingExecuter(IEnumerable<string> FileNames, Action<string> Something)
{
foreach (string FileName in FileNames)
{
Something(FileName);
}
}
public void SomethingOne(string FileName)
{
// todo - copy the file with name FileName to some web server
}
public void SomethingTwo(string FileName)
{
// todo - delete the file with name FileName
}
第一个函数可以如下使用。
SomethingExecuter(FileNames, SomethingOne);
SomethingExecuter(FileNames, SomethingTwo);
希望对您有所帮助。
我正在尝试制作一个应用程序,它将对目录中的每个文件执行某事。
那个东西应该是某种方法。但是因为我不知道具体是哪种方法,所以我正在尝试实现它,所以我的 "iterating" 方法接受任何方法的参数或某种方法引用,这样他就可以在每个文件上调用它。
重点是关于如何处理每个文件有很多选项,用户可以选择他想要的那个。这些选项也必须开放扩展,所以一周后我可能会决定添加一个新选项,这就是为什么我需要:
一种可以调用任何方法的方法,而无需事先了解其签名。
Actions 和 Functions 对我不起作用,因为它们需要具体的签名。委托也是如此,据我所知并且(我认为)它们不能作为方法参数传递。
我想要实现的示例:
void Iterate(DirectoryInfo dir, method dostuff)
{
foreach(var file in dir.GetFiles())
{
dostuff(file);
//And this is the point where I feel stupid...
//Now I realise I need to pass the methods as Action parameters,
//because the foreach can't know what to pass for the called method
//arguments. I guess this is what Daisy Shipton was trying to tell me.
}
}
您的想法可以实现,但是执行某事的函数必须始终具有相同的签名;为此,您可以使用预定义的委托类型。考虑以下代码段。
public void SomethingExecuter(IEnumerable<string> FileNames, Action<string> Something)
{
foreach (string FileName in FileNames)
{
Something(FileName);
}
}
public void SomethingOne(string FileName)
{
// todo - copy the file with name FileName to some web server
}
public void SomethingTwo(string FileName)
{
// todo - delete the file with name FileName
}
第一个函数可以如下使用。
SomethingExecuter(FileNames, SomethingOne);
SomethingExecuter(FileNames, SomethingTwo);
希望对您有所帮助。