2009-11-24 3 views
2

Ran dans ce lors de la conversion d'une interface VB.NET en C#; la version VB définit un événement qui ne se conforme pas à la signature typique (expéditeur d'objet, EventArgs e):Conversion de VB.NET en C# - Déclaration d'événement d'interface pour les événements non-EventHandler

VB

Public Class SomeType 
    ' Does *NOT* inherit from EventArgs 
End Class 

Public Interface ISomething 
    Public Event SomeEvent(sender as Object, value as SomeType) 
End Interface 

Quel est le C# équivalent pour ISomething? Mes tentatives jusqu'à présent ont échoué à compiler:

Répondre

9

Vous aurez besoin d'une déclaration de type délégué:

public delegate void SomeEventHandler(object sender, SomeType value) 

public class SomeType 
{ 
} 

public interface ISomething 
{ 
    public event SomeEventHandler SomeEvent; 
} 

Ou dans .NET 3.5 vous pouvez utiliser le type d'action intégré:

public class SomeType 
{ 
} 

public interface ISomething 
{ 
    public event Action<object, SomeType> SomeEvent; 
} 
+0

C'est proche de ce que j'ai essayé; Pour conserver le nom du délégué, j'ai essayé de le déclarer dans l'interface C#, mais il n'a pas pu être compilé. Est-il possible de déclarer un délégué dans le cadre d'une interface, ou le délégué devra-t-il résider en dehors de l'interface? – STW

+0

Il devra être en dehors de l'interface - contrairement à VB, C# n'autorise pas les types imbriqués dans une interface (ce qui est pénible pour certaines choses, mais peu importe). –