Переопределяющий делегат. ToString () - PullRequest
2 голосов
/ 20 сентября 2010
 private delegate int Operate(int x, int y);
 Operate usedOperator;

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

usedOperator.ToString () должен возвращать либо "+" "-", либо любой метод, который в настоящее время содержит делегат.Возможно ли это как-то?

РЕДАКТИРОВАТЬ: Альтернативы делегатского подхода тоже будет хорошо.Я в основном пишу программу, которая задает пользователю некоторые математические вопросы со случайными числами и операторами.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2010

Вы не можете переопределить членов делегата, но вы можете достичь того, чего хотите, с помощью выражений:

Expression<Func<int, int, int>> expr = (a, b) => a + b;
Console.WriteLine(expr.Body.ToString()); // prints "(a + b)"
1 голос
/ 20 сентября 2010

Почему бы не использовать наследование и полиморфизм.
Создайте абстрактный класс MathOperation и создайте несколько классов, которые реализуют MathOperation, например, AddOperation, SubtractOperation и так далее. Вы можете переопределить ToString () в этих классах.
В вашем коде вы должны иметь:


MathOperation operation = new AddOperation(x, y); // or new MultiplyOperation(x, y);
operation.Perform(); // This will perform addition
operation.ToString(); // This will print "+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...