2009-04-27 72 views
8

我正在將一些代碼從VB.NET遷移到C#(3.5)。從VB.NET遷移'句柄'到C#

我發現類似的結構:

Public Event DataLoaded(ByVal sender As Object, ByVal e As EventArgs) 

Protected Sub Mag_Button_Load_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Mag_Button_Load.Click 
[..] 
     RaiseEvent DataLoaded(Me, EventArgs.Empty) 
End Sub 
[..] 

'Other Class 
Private Sub LoadData(ByVal sender As Object, ByVal e As System.EventArgs) Handles oData.DataLoaded 
[..] 
End Sub 

什麼是把這種行爲給C#的最直接的方法是什麼?

回答

11

我建議使用Telerik Code Converter作爲開始。

C#沒有像VB.NET那樣通過「Handles」關鍵字的方式自動附加事件處理程序。

//EventHandler declaration 
public event EventHandler DataLoaded; 
protected void Mag_Button_Load_Click(object sender, EventArgs e) 
{ 

    //Raise Event 
    if (DataLoaded != null) { 
     DataLoaded(this, EventArgs.Empty); 
    } 
} 

此外,您需要將事件處理程序分配的對象是這樣的:

Button1.Click += Button1_Click; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //do something. 
} 

但是C#確實有這樣做還有的簡潔能力:

Button1.Click += (sender, e)=> 
{ 
    //do something 
} 
+1

我想你已經忘記了最後一段代碼中的lambda表達式的=>(或者匿名方法的委託關鍵字和參數類型)。 – 2009-04-27 16:57:50