Une méthode anonyme, c’est juste un delegate sont le corps de la méthode est passé inline.
Oui, la valeur de tes paramètres doit provenir d’ailleurs : en donnant le trigger, tu lui indiques la logique de ta méthode, pas ses paramètres.
Pour ton exemple (2 int), tu pourrais avoir le code suivant :
[code]delegate bool TestCase(int a, int b);
static void Test()
{
int myA = 2, myB = -1;
Trigger t = new Trigger(delegate(int aa, int bb) { return(aa>bb); }, myA, myB);
t.Fire += SomeFunction;
}[/code]
tu pourrais aussi très bien ne renseigner tes variables A et B que plus tard au moyen de propriétés.
Et dans ta classe trigger, tu devrais avoir le code suivant :
[code]class Trigger
{
public Trigger(TestCase testMethod, int a, int B)
{
_testMethod = testMethod;
_a = a;
_b = b;
}
private TestCase _testMethod;
private int _a;
private int _b;
void IntervalElapsed()
{
if(_testMethod(_a, _b))
OnFile();
}
}[/code]
Par exemple…
Par contre si ton nombre d’arguments est susceptible de varier, ca va devenir un peu plus chiant : tu ne passeras plus un delegate précis, mais carrément un paramètre de type Delegate, et un tableau d’objets pour les paramètres (c’est la méthode la plus simple).
Sur ton Delegate, tu pourras appeler la méthode .Invoke(object[] params) qui appelle ta méthode peu importe sa signature. Par contre je n’ai pas regardé comment cela se comportait pour les valeurs de retour.