2009-04-27 6 views
8

Je migre du code de VB.NET vers C# (3.5).Migration de 'Handles' de VB.NET vers C#

je trouve des structures telles que:

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 

Quelle est la façon la plus simple de traduire un tel comportement à C#?

Répondre

11

Je recommande d'utiliser le Telerik Code Converter comme début.

C# n'a pas la possibilité d'attacher automatiquement des gestionnaires d'événements au moyen du mot-clé "Handles" comme le fait 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); 
    } 
} 

En outre, vous devez affecter vos gestionnaires d'événements aux objets comme celui-ci:

Button1.Click += Button1_Click; 

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

Cependant C# a la capacité succincte de le faire ainsi:

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

Je pense vous avez soit oublié le => pour une expression lambda dans le dernier morceau de code (ou le mot-clé délégué et les types de paramètres pour une méthode anonyme). –

+0

@Jon - Merci pour la correction! –

+1

Ajout d'expressions lambda aux événements peut également être fait dans VB.NET, avec la monstruosité suivante: 'AddHandler Button1.Click, Sub (expéditeur, e) 'faire quelque chose ici', ou' AddHandler Button1.Click, Sub (expéditeur, e) «faire quelque chose ici sur plusieurs lignes» End Sub » –