[英]Converting VB.NET event to C#
我正在查看旧的VB.net代码
Public Event TagDetected(ByVal t As Tag)
...
RaiseEvent TagDetected(t)
我正在尝试转换为C#。 我的尝试:
public event EventHandler<Tag> TagDetected;
...
TagDetected(this, t.Clone());
不起作用,给我一个错误:
错误1类型XYZ.VKM.Common.Tag不能用作通用类型或方法System.EventHandler中的类型参数TEventArgs。 没有从“ XYZ.VKM.Common.Tag”到“ System.EventArgs”的隐式引用转换。
我想你打算写:
public event EventHandler<TagEventArgs> TagDetected;
其中TagEventArgs是您自己的EventArgs子类,公开了DetectedTag属性。 这样可以确保严格遵守事件处理程序模式(即,在任何处理程序中,您始终可以将EventArgs称为EventArgs,而不必知道它们只是一个int,或者在您的情况下,只是一个标记)。
EventHandler {TEventArgs}委托适用于采用从EventArgs类派生的泛型类型的函数。 在您的示例中, Tag
类不是从EventArgs
派生的,这就是为什么您会收到错误消息。
event
关键字不必与EventHandler
或EventHandler{TEventArgs}
委托一起使用,但实际上可以与任何委托一起使用。 在这种情况下,您可以更好地翻译代码,如下所示:
public event Action<Tag> TagDetected;
...
TagDetected(t.Clone());
VB中有两种形式的事件声明-一种使用显式委托类型,另一种使用隐式委托类型-您使用了隐式委托方法。 C#仅具有显式委托类型方法。 等效的C#代码为:
public delegate void TagDetectedEventHandler(Tag t);
public event TagDetectedEventHandler TagDetected;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.