[英]C# . Explanation about the code converted from VB
我正在使用转换以下VB代码的转换器
Public Event Progress(ByVal Percent As Integer)
到C#
public delegate void ProgressEventHandler(int Percent);
private ProgressEventHandler ProgressEvent;
public event ProgressEventHandler Progress
{
add
{
ProgressEvent = (ProgressEventHandler) System.Delegate.Combine(ProgressEvent, value);
}
remove
{
ProgressEvent = (ProgressEventHandler) System.Delegate.Remove(ProgressEvent, value);
}
}
似乎很多代码。 我只希望这三行。
public delegate void ProgressEventHandler(int Percent);
private ProgressEventHandler ProgressEvent;
public event ProgressEventHandler Progress;
然后我以这种方式调用事件
void OnProgress(int p) {
ProgressEvent?.Invoke (p);
}
因此,我确切需要知道的是Progress主体(带有添加和删除)的优点是什么。 我应该坚持自己的代码还是由转换器使用代码? 哪一个更好?
这些System.Delegate.Combine
和System.Delegate.Remove
调用只是执行以下操作的冗长方式:
// combine
ProgressEvent += value;
// remove
ProgressEvent -= value;
将事件成员变成以下成员:
private ProgressEventHandler ProgressEvent;
public event ProgressEventHandler Progress
{
add
{
ProgressEvent += value;
}
remove
{
ProgressEvent -= value;
}
}
那时,它等效于自动实现的事件成员:
public event ProgressEventHandler Progress;
因此,这本质上只是定义事件和事件处理程序的冗长方式,但实际上意味着相同。 我假设您所使用的转换器只是使用冗长的方法,以便能够更轻松地处理非标准解决方案。 也许它是从编译的IL中生成的,这时看起来或多或少都是相同的。
顺便说一句。 由于Progress
事件和处理程序ProgressEvent
未链接,因此您期望的代码将无法工作(因此,如果要拆分这些成员,则需要显式实现该事件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.