我正在使用转换以下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);
}
}
这似乎是很多代码。我只期待这3行。
public delegate void ProgressEventHandler(int Percent);
private ProgressEventHandler ProgressEvent;
public event ProgressEventHandler Progress;
然后我以这种方式调用事件
void OnProgress(int p) {
ProgressEvent?.Invoke (p);
}
那么究竟我需要知道的是Progress体的优势是什么(添加和删除)。我应该坚持自己的代码还是使用转换器的代码?哪一个更好?
答案 0 :(得分:2)
这些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
未链接,因此您的预期代码将无效(因此,如果您要拆分这些成员,则需要明确地实现事件)。