簡體   English   中英

C# 。 有關從VB轉換的代碼的說明

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM