[英]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.