2010-09-19 6 views
2
private delegate int Operate(int x, int y); 
Operate usedOperator; 

int Add(int x, int y) 
{ 
    return x + y; 
} 

usedOperator.ToString() doit renvoyer "+" "-" ou toute autre méthode que le délégué contient actuellement. Est-ce possible en quelque sorte?Substitution de délégué.ToString()

EDIT: Des solutions de rechange à l'approche délégué seraient également utiles. Je suis en train d'écrire un programme qui demande à l'utilisateur des questions de mathématiques avec des nombres aléatoires et des opérateurs.

Répondre

1

Pourquoi ne pas utiliser le polymorphisme héritage &.
Créez une classe MathOperation abstraite et créez plusieurs classes implémentant MathOperation, par ex. AddOperation, SubtractOperation et ainsi de suite. Vous pouvez remplacer ToString() dans ces classes.
Dans votre code, vous devez avoir:


MathOperation operation = new AddOperation(x, y); // or new MultiplyOperation(x, y); 
operation.Perform(); // This will perform addition 
operation.ToString(); // This will print "+" 
+0

Oh mon Dieu, parfois tu ne vois pas le plus évident. Bien sûr, vous avez raison. Oh mon ... MERCI. – Blub

3

Vous ne pouvez pas remplacer les membres d'un délégué, mais vous pouvez obtenir ce que vous voulez avec les expressions:

Expression<Func<int, int, int>> expr = (a, b) => a + b; 
Console.WriteLine(expr.Body.ToString()); // prints "(a + b)"