Наличие функции в качестве аргумента - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь создать новый класс Timers, чтобы помочь мне в изучении c #. Как бы я позволил аргументу для функции быть функцией?

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011

Все довольно просто.Просто укажите аргумент типа delegate, например Action или Func.

void PassAnAction(Action action)
{
    action(); // call the action
}

T PassAFunction<T>(Func<T> function)
{
    return function();
}
1 голос
/ 07 сентября 2011
public class MyTimer {
    private readonly Action _fireOnInterval;

    public MyTimer(Action fireOnInterval, TimeSpan interval, ...) {
        if (fireOnInterval == null) {
            throw new ArgumentNullException("fireOnInterval");
        }
        _fireOnInterval = fireOnInterval;
    }

    private void Fire() {
        _fireOnInterval();
    }
    ...
}

Вы можете назвать это так:

new MyTimer(() => MessageBox.Show("Elapsed"), TimeSpan.FromMinutes(5), ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...