加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用初始化语法初始化事件

发布时间:2020-12-15 07:54:29 所属栏目:百科 来源:网络整理
导读:我经常想写这样的东西: new Form{ Text = "Caption",Controls = { new Button { Text = "Button 1",Click = (s,e) = MessageBox.Show("Button 1 Clicked"),Location = new Point(10,10) },new Button { Text = "Button 2",Click = new EventHandler(Button2
我经常想写这样的东西:
new Form
{
    Text = "Caption",Controls =
    {
        new Button { Text = "Button 1",Click = (s,e) => MessageBox.Show("Button 1 Clicked"),Location = new Point(10,10) },new Button { Text = "Button 2",Click = new EventHandler(Button2Clicked),40) },new Button { Text = "Button 3",Click = Button3Clicked,70) },},}

初始化器语法只是糖,为什么编译器无法弄清楚如何为事件订阅生成代码?

给我一些糖,宝贝!

当发明初始化语法时,有人必须考虑事件并拒绝它们.我一直试图想象一下原理可能是什么,而且我一直空白.

是因为事件是一个可能有多个订阅者的多播对象吗?不,这是一个初始化过程;没有其他订阅者. [更新]不正确,初始化程序在构造后应用,对象可以在subscribe to its own events.

Eric的一个注释:我听说过为什么C#没有实现X语音功能.在这种情况下,有人已经在那里,实现初始化器.

更新

似乎存在争用/混淆,因为我在我的示例中使用了Click =.实际语法与问题无关.它可以很容易地成为Click =,它反映了你必须正常添加处理程序的方式.我更喜欢前者,因为它与初始化器语法的其余部分一致,但最终我并不关心,只要我能订阅初始化列表中的事件.

另一个更新

我确实意识到现在添加该功能可能不太可能.我想到的第一个问题是Intellisense必须更新.现在可能有很多其他因素会阻碍添加此功能.我的问题是:他们为什么不首先添加它.一定有令人信服的东西可以证明“不可能”的投票.

解决方法

我看不出有什么理由说他们不能提供这小茶匙糖,我猜他们只是没有!

事件中已经有相当多的语法糖,如果只是在没有提供自己的实现的情况下在类上声明一个事件,编译器就会为你提供一个委托支持字段,以及添加/删除’方法’实现.另外,当你添加一个事件处理程序时,编译器使用委托推理,允许你简单地指向一个方法,而不是创建一个代表该方法的委托.

有趣的是,Mono C#允许您在对象初始值设定项中添加事件处理程序:

http://tirania.org/blog/archive/2009/Jul-27-1.html

是时候切换到Mono

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读