Действие - это тип делегата, другими словами, оно инкапсулирует функцию. В частности, Action инкапсулирует функцию, которая возвращает void, тогда как, например, Func инкапсулирует функцию с возвращаемым значением. Они очень похожи на указатели на функции в C ++ - по сути, это ссылка на функцию, то есть способ инкапсулировать поведение.
Метод .Invoke () принимает делегат Action и запускает функцию, на которую он указывает. В этом случае функция, на которую она указывает, является лямбда-выражением:
() => { label1.Text = Line }
Начальные скобки обозначают любые параметры, передаваемые в функцию. В этом случае нет параметров, поэтому круглые скобки пусты. Например, если вы хотите передать две строки, вы должны сделать:
var action = new Action<string, string>( (x, y) => { // use x and y }
Что бы ни следовало за выражением '=>', это, по сути, тело функции. У вас есть доступ к переменным, указанным в скобках внутри области действия этого тела.
В целом это быстрый способ создания анонимной функции на лету, которая по сути эквивалентна следующему:
public void SetLine()
{
label1.Text = Line;
}
Таким образом, вы также можете создать этот объект Action, выполнив:
var action = new Action(SetLine)
где вы передаете имя метода для инкапсуляции вместо передачи в лямбду. То, что передается, известно как «Группа методов».