在C#中创建对象时订阅事件

mba*_*tas 7 c# events

在C#(.NET 4.5)中,我想在创建对象时订阅一个事件.

当然,以下内容可行:

CheckBox c = new CheckBox();
c.Name = "TheCheckBox";
c.Checked += c_Checked;
Run Code Online (Sandbox Code Playgroud)

但是想知道是否可以采取以下措施:

CheckBox c = new CheckBox() {
    Name = "TheCheckBox",
    Checked += c_Checked
}
Run Code Online (Sandbox Code Playgroud)

讨论后编辑:这是为了实现如下:

MyUniformGrid.Add(new CheckBox() {
    Name = "TheCheckBox",
    Checked += CheckHandler
});
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

不,遗憾的是,对象初始值设定项中不支持事件订阅.在某些情况下创建GUI 会非常简单,但是没有......

中途宿舍是:

Checkbox c = new CheckBox { Name = "TheCheckBox" };
c.Checked += c_Checked;
Run Code Online (Sandbox Code Playgroud)

(理想情况下重命名c_Checked为实际有意义的名称 - 我讨厌VS生成的名称......)

  • @baytas:它甚至都不丑.这完全合情合理.虽然我希望对象初始化程序语法支持它,但我认为在这里打破循环中的另一个局部变量没有任何问题. (4认同)
  • @baytas:对 - 基本上不会.你可以连接一个扩展方法来允许:`MyUniformGrid.Add(new CheckBox().with(c => c.Checked + = CheckHandler))`如果这会有帮助...... (3认同)