2009-04-27 19 views
8

Sto migrando del codice da VB.NET a C# (3.5).Migrazione di "handle" da VB.NET a C#

trovo strutture come:

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 

Qual è il modo più semplice di tradurre tale comportamento in C#?

risposta

11

Si consiglia di utilizzare Telerik Code Converter come inizio.

C# non ha questo facile collegamento automatico di gestori di eventi tramite la parola chiave "Handles" come fa VB.NET.

//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); 
    } 
} 

Inoltre, è necessario assegnare i gestori di eventi agli oggetti come questo:

Button1.Click += Button1_Click; 

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

Tuttavia C# ha la capacità succinta di fare questo così:

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

penso hai dimenticato il => per un'espressione lambda nell'ultimo pezzo di codice (o la parola chiave delegata e i tipi di parametro per un metodo anonimo). –

+0

@ Jon - Grazie per la correzione! –

+1

L'aggiunta di espressioni lambda agli eventi può essere eseguita anche in VB.NET, con la seguente mostruosità: 'AddHandler Button1.Click, Sub (sender, e) 'fa qualcosa qui', o 'AddHandler Button1.Click, Sub (mittente, e) 'fare qualcosa qui su più righe' End Sub –