【问题标题】:VB.NET to C# with Event Handlers带有事件处理程序的 VB.NET 到 C#
【发布时间】:2016-12-16 12:52:38
【问题描述】:

大家好,很抱歉,但你必须一直得到这个,我试图搜索它,但找不到任何特定于我正在寻找的东西。

基本上,我非常了解 VB.NET,并且经常使用它,我想学习的是 C#,所以我决定利用我的空闲时间来尝试掌握它。我通过使用我的一个旧的 VB.NET 自定义二进制对象并手动转换它来做到这一点(不是真正使用转换器,因为我想学习它而不是仅仅转换它。)但是我正在使用互联网来指导我。到目前为止,我正在尝试创建自定义偶数处理程序,我以前的 VB.NET 代码如下;

Public Event BeforeExecution_Handler()

但在 C# 中做这件事似乎有点棘手,我做了以下操作

public event BeforeExecution_HandlerEvent BeforeExecution_Handler;
public delegate void BeforeExecution_HandlerEvent(); 

首先这是正确的,其次是这里发生了什么,为什么我必须为它创建两次定义。我猜测委托部分是您放置变量的地方,但为什么会这样。谁能解释一下

【问题讨论】:

  • public event EventHandler BeforeExecution_Handler;?
  • 嗨,是的,我知道这一点,但我不只是想转换它,我想学习它。因此,为什么我采用这种方法,否则我将依赖这些工具,永远不知道实际需要什么。这个问题再次与为什么我需要事件和委托有关,我错过了什么吗?
  • 我不明白
  • 我从来没有像你那样在 VB.NET 中声明过事件。通常我将它们声明为:Public Event MyEvent As EventHandler。我猜当您删除 As EventHandler 部分时,VB 编译器会自动为您创建一个委托。但是在 C# 中似乎没有实现,这就是为什么您需要自己创建它的原因。 Delegate 是指向方法的指针,事件需要该指针,以便它们知道例如需要哪些参数。

标签: c# .net vb.net delegates vb.net-to-c#


【解决方案1】:

在 VB.NET 中,您可以隐式创建一个委托,因此您可以这样做:

声明:

Public Event MsgArrivedEvent(ByVal message As String) 'behind the scenes a delegate is created for you

调用:

RaiseEvent MsgArrived("foo")

在 C# 中,您必须使用委托。

声明:

public delegate void MsgArrivedEventHandler(string message);
public event MsgArrivedEventHandler MsgArrivedEvent;

调用:

MsgArrivedEvent("Test message");

请注意,您也可以显式以与 C# 相同的方式在 VB.NET 中创建委托,但这只是更多的输入,实际上没有任何好处:

声明:

Public Delegate Sub MsgArrivedEventHandler(ByVal message As String)
Public Event MsgArrivedEvent As MsgArrivedEventHandler

调用:

RaiseEvent MsgArrivedEvent("foo")

还要注意,最佳实践实际上是使用 senderEventArgs 类(或从它继承的类)作为事件/委托的参数:

public delegate void MsgArrivedEventHandler(object sender, EventArgs e);

【讨论】:

  • 值得一提的是,在大多数情况下,使用EventHandler 或通用版本EventHandler<TEventArgs> 就足够了。第一个会给你一个delegate void EventHandler(object sender, EventArgs e 用于空的EventArgs。后者为您提供相同的功能,但将您的自定义 TEventArgs 作为第二个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多