На button1_Click один MessageBox за другим появляются - первый показ 30 второй показ 200:Почему программа использует последний метод, добавленный в делегат?
public partial class Form1 : Form
{
delegate void myMathFunction(int j, int q);
void add(int x, int y) {MessageBox.Show((x + y).ToString());}
void multiply(int x, int y){MessageBox.Show((x*y).ToString());}
private void button1_Click(object sender, EventArgs e)
{
myMathFunction foo = new myMathFunction(add);
foo+= new myMathFunction(multiply);
foo.Invoke(10, 20);
}
public Form1() { InitializeComponent(); }
}
но следующее просто идет прямо к 200, и все же я назначены оба метода к делегату - то, что случилось добавить и почему он предпочитает умножать?
public partial class Form1 : Form
{
delegate int myMathFunction(int j, int q);
int add(int x, int y){return x + y;}
int multiply(int x, int y) {return x * y;}
private void button1_Click(object sender, EventArgs e)
{
myMathFunction foo = new myMathFunction(add);
foo += new myMathFunction(multiply);
MessageBox.Show(foo.Invoke(10, 20).ToString());
}
public Form1() { InitializeComponent(); }
}
Может второй образец кода быть изменен таким образом, что делегат работает метод добавления, а не метод умножения?
Как мне изменить его так, чтобы он работал, а не умножался? – whytheq
он всегда будет исполнять оба. Вы можете просто добавить одну функцию к экземпляру делегата. Или вы можете добавить функцию добавления последним. Ответы, которые у вас есть, очень четко показывают, как вызов делегата обрабатывает возвращаемые значения. То, что вы не сказали, является конечной целью. Какую проблему ты пытаешься решить? –
Я просто пытаюсь понять делегатов! не более, чем любопытство Давида. Если обе функции добавляются к делегату, то в чем смысл добавления первой функции, если я не могу это понять ?! – whytheq