Вам необходимо использовать делегат, который представляет собой специальный класс, представляющий метод. Вы можете либо определить свой собственный делегат, либо использовать один из встроенных, но подпись делегата должна соответствовать методу, который вы хотите передать.
Определение собственных:
public delegate int MyDelegate(Object a);
Этот пример соответствует метод, который возвращает целое число и принимает ссылку на объект в качестве параметра.
В вашем примере, как methodA, так и methodB не принимают параметры, возвращают void, поэтому мы можем использовать встроенный класс делегирования Action.
Вот ваш пример изменения:
public void PassMeAMethod(string text, Action method)
{
DoSomething(text);
// call the method
method();
}
public void methodA()
{
//Do stuff
}
public void methodB()
{
//Do stuff
}
public void Test()
{
//Explicit
PassMeAMethod("calling methodA", new Action(methodA));
//Implicit
PassMeAMethod("calling methodB", methodB);
}
Как вы можете видеть, вы можете либо использовать тип делегата, явно или неявно, в зависимости от того подходит вам.
Вы должны иметь возможность сделать это с делегатами. – jimplode
Какую версию .NET Framework вы используете? –
3.5, может кто-нибудь показать мне, используя пример выше? спасибо – raklos