Да, вам нужно использовать делегата. Делегаты довольно похожи на указатели на функции в C / C ++.
Сначала необходимо объявить подпись делегата. Скажем, у меня есть эта функция:
private int DoSomething(string data)
{
return -1;
}
Объявление делегата будет ...
public delegate int MyDelegate(string data);
Затем вы можете объявить myFunc таким образом.
public bool myFunc(MyDelegate methodOnObject)
{
[code here]
int returnValue = methodOnObject("foo");
[code here]
return returnValue;
}
Затем вы можете вызвать его одним из двух способов:
myFunc(new MyDelegate(DoSomething));
Или в C # 3.0 и более поздних версиях вы можете использовать сокращение ...
myFunc(DoSomething);
(Он просто оборачивает предоставленную функцию в конструктор по умолчанию для этого делегата автоматически. Вызовы идентичны).
Если вы не хотите создавать делегат или фактическую реализацию функции для простых выражений, в C # 3.0 также будет работать следующее:
public bool myFunc(Func<string, int> expr)
{
[code here]
int returnValue = methodOnObject("foo");
[code here]
return returnValue;
}
Что тогда можно было бы назвать так:
myFunc(s => return -1);