C# VB.NET WithEvents关键字行为-VB.NET编译器限制?

C# VB.NET WithEvents关键字行为-VB.NET编译器限制?,c#,.net,vb.net,clr,vb.net-to-c#,C#,.net,Vb.net,Clr,Vb.net To C#,我正在努力熟悉C#,就像我熟悉VB.NET(我工作场所使用的语言)一样。学习过程中最好的一点是,通过学习另一种语言,你可以更多地了解你的母语——像下面这样的小问题: 根据我发现的源代码和过去的经验,VB.NET中声明为WithEvents的字段能够引发事件。我知道C#没有直接的等价物,但我的问题是:VB.NET中没有这个关键字的字段不能引发事件,有没有办法在C#中创建同样的行为?VB编译器是否只是阻止这些对象处理它们的事件(同时实际上允许它们像往常一样引发事件) 我只是好奇;我对这个问题没有任何

我正在努力熟悉C#,就像我熟悉VB.NET(我工作场所使用的语言)一样。学习过程中最好的一点是,通过学习另一种语言,你可以更多地了解你的母语——像下面这样的小问题:

根据我发现的源代码和过去的经验,VB.NET中声明为WithEvents的字段能够引发事件。我知道C#没有直接的等价物,但我的问题是:VB.NET中没有这个关键字的字段不能引发事件,有没有办法在C#中创建同样的行为?VB编译器是否只是阻止这些对象处理它们的事件(同时实际上允许它们像往常一样引发事件)


我只是好奇;我对这个问题没有任何特殊的应用…

省略WithEvents不会阻止成员提出事件。它只是阻止你在他们的事件中使用“handles”关键字

以下是WithEvents的典型用法:

C1类
公共事件ev作为新的事件投手()
Public Sub catcher()处理ev事件
Debug.print(“事件”)
端接头
末级
下面是一个不与事件一起使用的类,它大致相当。它说明了WithEvents非常有用的原因:

C2类
私人(eventshower)
公共财产ev()作为事件播送者
得到
返回值
结束
设置(作为EventSprower的ByVal值)
如果你不是什么都不是的话
removehandler_ev.event,catcher的地址
如果结束
_ev=价值
如果你不是什么都不是的话
addhandler\u ev.event,捕获器的地址
如果结束
端集
端属性
公共分新()
ev=新的EventSprower()
端接头
公共副捕手()
Debug.print(“事件”)
端接头
末级

我想我从来没有注意到这一点——可能是因为我唯一一次注意到这一点的时候是当我得到错误的时候:-)+1我正在尝试精确的反转,这意味着我正在从C#学习VBNET。谢谢你的好意question@Will:祝你玩得开心,VB.NET因其名称中的“VB”而受到不好的评价,但基本上是没有根据的——VB.NET是一种与VB完全不同的语言。请记住,您应该始终在上设置
选项Strict,在
上设置
选项Explicit。这两行代码将在两个默认编译器选项中占据主导地位。如果你的经历和我的一样,你会学到更多关于这两种语言的知识。是的,我和威尔一样,这有助于我理解事件的作用:)再次感谢!