У меня есть этот код;Вызвать действие из другого действия
Button button = new Button();
MessageBox ms = new MessageBox(button);
Action<bool> action = ms.Show();
action += (b) =>
{
Console.WriteLine(b.ToString()); //this isnt working
Console.WriteLine("??");
};
Console.Read();
button.OnClick();
Console.ReadKey();
MessageBox класс:
class MessageBox
{
Button _button;
public MessageBox(Button button) { _button = button; }//initialize button
public Action<bool> Show()
{
Action<bool> action = new Action<bool>(CallForTest);
_button.OnClick+=()=>{ action?.Invoke(true); };
return action;
}
//...working.*//
public void CallForTest(bool statu){}
}
Я хочу вернуть действие и при нажатии на кнопку, вызовите action.But это не будет работать? В чем проблема? Действие является делегатом, поэтому делегат является ссылочным типом? (Класс, сгенерированный компилятором). Что не так на этом рисунке?
Я думаю, что когда «Show()» заканчивается, «действие» собирается из коллекционера gargabe. Но это работает с другими ссылочными типами? например;
public Test Show()
{
Test test = new Test("??");
button.OnClick +=() =>
{
test.JustForTest(); //working (cw("?????" + ctorvalue);
};
return test;
}
Это хорошо. Продолжайте кодирование. – ViVi