【问题标题】:c# shorthand binding of event listener during object instantiation?c#对象实例化期间事件监听器的简写绑定?
【发布时间】:2017-11-29 15:58:15
【问题描述】:

我发现我经常喜欢在循环填充列表时创建新项目并将其添加到列表中:

foreach(var cat in ctx.InventoryCategories)
{
    pnl_catList.Controls.Add(new RadioButton()
    {
        Text = cat.CategoryName,
        Tag = cat,
        Checked = false,

        // how could I do this?
        Click += onClick(),
    })
}

但我现在知道如何添加事件侦听器的唯一方法是:

foreach(var cat in ctx.InventoryCategories)
{
    var newButton = new RadioButton()
    {
        Text = cat.CategoryName,
        Tag = cat,
        Checked = false,
    })

    newButton.Click += onClick();
    pnl_catList.Controls.Add(newButton);
}

这是一种不好的做法,还是有一种很好的快捷方式来绑定事件?

【问题讨论】:

  • 后者是非常好的做法。我找不到通过初始化程序添加事件处理程序的合理方法。

标签: c# events instantiation shorthand


【解决方案1】:

字段分配和向活动添加成员是两件不同的事情。 C# 语言允许使用 = 作为对象初始化运算符,但不允许使用 += 或 -=,它们在事件类的幕后实现为添加和删除函数。这是一种语言选择——我相信它是基于不在构造函数中包含复杂功能以保持初始化阶段干净的愿望。

绕过这个限制是可能的,但是没有比在初始化对象后简单地添加监听器更容易理解的解决方案,并且需要更少的代码行。

简而言之,没有速记。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2018-08-14
    • 2011-12-09
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多