Анонимная функция приведет к тому, что функция-член будет автоматически сгенерирована компилятором. Сгенерированное компилятором имя будет содержать недопустимые символы в C #, чтобы вы не могли назвать другого члена в вашем классе с таким же именем. Кроме этого, он будет вести себя абсолютно идентично обычным методам, связанным с событием, и, таким образом, все задействованные ресурсы будут собираться мусором.
И, как примечание к проекту, поскольку вас интересует значение, возвращаемое из диалогового окна, я бы не советовал использовать событие для уведомления о закрытии диалогового окна. Вместо этого вы можете заключить код в статический метод, например, в котором вы открываете диалоговое окно, ждете цикла событий, пока диалоговое окно не будет закрыто, и читаете ввод от пользователя, возвращая входные данные в формате, который более подходит для дальнейшей обработки. Это потребует от вас открыть модальное окно. Вот пример:
public class MyDialog : Form
{
// We can make the constructor private, as this class is instantiated only
// in the Show method.
private MyDialog()
{
}
// ...
public class ReturnValue
{
public string Foo { get; set; }
// ...
}
public static ReturnValue ShowModal(/* any params, if required */)
{
ReturnValue result = new ReturnValue();
MyDialog dialog = new MyDialog();
if(DialogResult.OK == dialog.ShowDialog(null))
{
// We can access private members like txtFoo since we are within the class.
result.Foo = dialog.txtFoo.Text;
// ...
}
return result;
}
}