Метод передан в качестве параметра в метод C # 2.0 - PullRequest
0 голосов
/ 02 августа 2010

Если у меня есть такой фрагмент кода:

private void DoOperations(//method passed in)
{
    executeA();
    executeB();

    // run method passed in to DoOpertions()

    executeC();

}

Можно ли передать метод в качестве параметра?Сам метод может иметь число параметров X?

Спасибо

Ответы [ 6 ]

4 голосов
/ 02 августа 2010

Вы можете передать делегата. Делегат - это указатель на метод с той же сигнатурой, что и метод, на который он ссылается.

Подробнее на Делегаты .

2 голосов
/ 02 августа 2010
delegate void FunctionX(params object[] args);

private void DoOperations(FunctionX executeX) 
{ 
    executeA(); 
    executeB(); 

    executeX("any", "number", "of", "params");

    executeC(); 

} 
void MyFunction(params object[] p)
{
      // do stuff
}


DoOperations(MyFunction);
1 голос
/ 02 августа 2010

Просто, чтобы добавить к ответу Ненада, есть ряд встроенных делегатов в .Net Framework, которые вы должны стараться использовать как можно больше, вместо того, чтобы заново изобретать своих собственных делегатов, которые делают то же самое.

Используйте делегат Action, если у делегата нет возвращаемого значения, в противном случае используйте делегаты Func, каждый из которых перегружен до 4 входными параметрами.

0 голосов
/ 02 августа 2010

да, вы можете определить делегат и функцию DoOperatios () с аргументом этого типа. enter code here

delegate void AsFunction(string str, string str);// as many arguments as you want
public DoOperations(AsFunction asFunction)
{

        asFunction("hello1", "hello2");

}
0 голосов
/ 02 августа 2010
0 голосов
/ 02 августа 2010

Конечно, без параметров, которые вы хотите

...